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_crypto_server_stream.h" | 5 #include "net/quic/core/quic_crypto_server_stream.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 | 8 |
9 #include "base/base64.h" | 9 #include "base/base64.h" |
10 #include "crypto/secure_hash.h" | 10 #include "crypto/secure_hash.h" |
11 #include "net/quic/core/crypto/crypto_protocol.h" | 11 #include "net/quic/core/crypto/crypto_protocol.h" |
12 #include "net/quic/core/crypto/crypto_utils.h" | 12 #include "net/quic/core/crypto/crypto_utils.h" |
13 #include "net/quic/core/crypto/quic_crypto_server_config.h" | 13 #include "net/quic/core/crypto/quic_crypto_server_config.h" |
14 #include "net/quic/core/crypto/quic_random.h" | 14 #include "net/quic/core/crypto/quic_random.h" |
15 #include "net/quic/core/proto/cached_network_parameters.pb.h" | 15 #include "net/quic/core/proto/cached_network_parameters.pb.h" |
16 #include "net/quic/core/quic_config.h" | 16 #include "net/quic/core/quic_config.h" |
17 #include "net/quic/core/quic_flags.h" | 17 #include "net/quic/core/quic_flags.h" |
18 #include "net/quic/core/quic_protocol.h" | 18 #include "net/quic/core/quic_protocol.h" |
19 #include "net/quic/core/quic_server_session_base.h" | 19 #include "net/quic/core/quic_server_session_base.h" |
20 | 20 |
21 using base::StringPiece; | 21 using base::StringPiece; |
22 using std::string; | 22 using std::string; |
23 | 23 |
24 namespace net { | 24 namespace net { |
25 | 25 |
| 26 class QuicCryptoServerStream::ProcessClientHelloCallback |
| 27 : public ProcessClientHelloResultCallback { |
| 28 public: |
| 29 ProcessClientHelloCallback( |
| 30 QuicCryptoServerStream* stream, |
| 31 const scoped_refptr<ValidateClientHelloResultCallback::Result>& result) |
| 32 : stream_(stream), result_(result) {} |
| 33 |
| 34 void Run( |
| 35 QuicErrorCode error, |
| 36 const string& error_details, |
| 37 std::unique_ptr<CryptoHandshakeMessage> message, |
| 38 std::unique_ptr<DiversificationNonce> diversification_nonce) override { |
| 39 if (stream_ == nullptr) { |
| 40 return; |
| 41 } |
| 42 |
| 43 // Note: set the parent's callback to nullptr here because |
| 44 // FinishProcessingHandshakeMessageAfterProcessClientHello can be invoked |
| 45 // from either synchronous or asynchronous codepaths. When the synchronous |
| 46 // codepaths are removed, this assignment should move to |
| 47 // FinishProcessingHandshakeMessageAfterProcessClientHello. |
| 48 stream_->process_client_hello_cb_ = nullptr; |
| 49 |
| 50 stream_->FinishProcessingHandshakeMessageAfterProcessClientHello( |
| 51 *result_, error, error_details, std::move(message), |
| 52 std::move(diversification_nonce)); |
| 53 } |
| 54 |
| 55 void Cancel() { stream_ = nullptr; } |
| 56 |
| 57 private: |
| 58 QuicCryptoServerStream* stream_; |
| 59 scoped_refptr<ValidateClientHelloResultCallback::Result> result_; |
| 60 }; |
| 61 |
26 QuicCryptoServerStreamBase::QuicCryptoServerStreamBase(QuicSession* session) | 62 QuicCryptoServerStreamBase::QuicCryptoServerStreamBase(QuicSession* session) |
27 : QuicCryptoStream(session) {} | 63 : QuicCryptoStream(session) {} |
28 | 64 |
29 // TODO(jokulik): Once stateless rejects support is inherent in the version | 65 // TODO(jokulik): Once stateless rejects support is inherent in the version |
30 // number, this function will likely go away entirely. | 66 // number, this function will likely go away entirely. |
31 // static | 67 // static |
32 bool QuicCryptoServerStreamBase::DoesPeerSupportStatelessRejects( | 68 bool QuicCryptoServerStreamBase::DoesPeerSupportStatelessRejects( |
33 const CryptoHandshakeMessage& message) { | 69 const CryptoHandshakeMessage& message) { |
34 const QuicTag* received_tags; | 70 const QuicTag* received_tags; |
35 size_t received_tags_length; | 71 size_t received_tags_length; |
(...skipping 12 matching lines...) Expand all Loading... |
48 | 84 |
49 QuicCryptoServerStream::QuicCryptoServerStream( | 85 QuicCryptoServerStream::QuicCryptoServerStream( |
50 const QuicCryptoServerConfig* crypto_config, | 86 const QuicCryptoServerConfig* crypto_config, |
51 QuicCompressedCertsCache* compressed_certs_cache, | 87 QuicCompressedCertsCache* compressed_certs_cache, |
52 bool use_stateless_rejects_if_peer_supported, | 88 bool use_stateless_rejects_if_peer_supported, |
53 QuicSession* session, | 89 QuicSession* session, |
54 Helper* helper) | 90 Helper* helper) |
55 : QuicCryptoServerStreamBase(session), | 91 : QuicCryptoServerStreamBase(session), |
56 crypto_config_(crypto_config), | 92 crypto_config_(crypto_config), |
57 compressed_certs_cache_(compressed_certs_cache), | 93 compressed_certs_cache_(compressed_certs_cache), |
| 94 crypto_proof_(new QuicCryptoProof), |
58 validate_client_hello_cb_(nullptr), | 95 validate_client_hello_cb_(nullptr), |
59 helper_(helper), | 96 helper_(helper), |
60 num_handshake_messages_(0), | 97 num_handshake_messages_(0), |
61 num_handshake_messages_with_server_nonces_(0), | 98 num_handshake_messages_with_server_nonces_(0), |
62 send_server_config_update_cb_(nullptr), | 99 send_server_config_update_cb_(nullptr), |
63 num_server_config_update_messages_sent_(0), | 100 num_server_config_update_messages_sent_(0), |
64 use_stateless_rejects_if_peer_supported_( | 101 use_stateless_rejects_if_peer_supported_( |
65 use_stateless_rejects_if_peer_supported), | 102 use_stateless_rejects_if_peer_supported), |
66 peer_supports_stateless_rejects_(false), | 103 peer_supports_stateless_rejects_(false), |
67 chlo_packet_size_(0) { | 104 chlo_packet_size_(0), |
| 105 process_client_hello_cb_(nullptr) { |
68 DCHECK_EQ(Perspective::IS_SERVER, session->connection()->perspective()); | 106 DCHECK_EQ(Perspective::IS_SERVER, session->connection()->perspective()); |
69 } | 107 } |
70 | 108 |
71 QuicCryptoServerStream::~QuicCryptoServerStream() { | 109 QuicCryptoServerStream::~QuicCryptoServerStream() { |
72 CancelOutstandingCallbacks(); | 110 CancelOutstandingCallbacks(); |
73 } | 111 } |
74 | 112 |
75 void QuicCryptoServerStream::CancelOutstandingCallbacks() { | 113 void QuicCryptoServerStream::CancelOutstandingCallbacks() { |
76 // Detach from the validation callback. Calling this multiple times is safe. | 114 // Detach from the validation callback. Calling this multiple times is safe. |
77 if (validate_client_hello_cb_ != nullptr) { | 115 if (validate_client_hello_cb_ != nullptr) { |
78 validate_client_hello_cb_->Cancel(); | 116 validate_client_hello_cb_->Cancel(); |
79 validate_client_hello_cb_ = nullptr; | 117 validate_client_hello_cb_ = nullptr; |
80 } | 118 } |
81 if (send_server_config_update_cb_ != nullptr) { | 119 if (send_server_config_update_cb_ != nullptr) { |
82 send_server_config_update_cb_->Cancel(); | 120 send_server_config_update_cb_->Cancel(); |
83 send_server_config_update_cb_ = nullptr; | 121 send_server_config_update_cb_ = nullptr; |
84 } | 122 } |
| 123 if (process_client_hello_cb_ != nullptr) { |
| 124 process_client_hello_cb_->Cancel(); |
| 125 process_client_hello_cb_ = nullptr; |
| 126 } |
85 } | 127 } |
86 | 128 |
87 void QuicCryptoServerStream::OnHandshakeMessage( | 129 void QuicCryptoServerStream::OnHandshakeMessage( |
88 const CryptoHandshakeMessage& message) { | 130 const CryptoHandshakeMessage& message) { |
89 QuicCryptoServerStreamBase::OnHandshakeMessage(message); | 131 QuicCryptoServerStreamBase::OnHandshakeMessage(message); |
90 ++num_handshake_messages_; | 132 ++num_handshake_messages_; |
91 chlo_packet_size_ = session()->connection()->GetCurrentPacket().length(); | 133 chlo_packet_size_ = session()->connection()->GetCurrentPacket().length(); |
92 | 134 |
93 // Do not process handshake messages after the handshake is confirmed. | 135 // Do not process handshake messages after the handshake is confirmed. |
94 if (handshake_confirmed_) { | 136 if (handshake_confirmed_) { |
(...skipping 18 matching lines...) Expand all Loading... |
113 return; | 155 return; |
114 } | 156 } |
115 | 157 |
116 CryptoUtils::HashHandshakeMessage(message, &chlo_hash_); | 158 CryptoUtils::HashHandshakeMessage(message, &chlo_hash_); |
117 | 159 |
118 std::unique_ptr<ValidateCallback> cb(new ValidateCallback(this)); | 160 std::unique_ptr<ValidateCallback> cb(new ValidateCallback(this)); |
119 validate_client_hello_cb_ = cb.get(); | 161 validate_client_hello_cb_ = cb.get(); |
120 crypto_config_->ValidateClientHello( | 162 crypto_config_->ValidateClientHello( |
121 message, session()->connection()->peer_address().address(), | 163 message, session()->connection()->peer_address().address(), |
122 session()->connection()->self_address().address(), version(), | 164 session()->connection()->self_address().address(), version(), |
123 session()->connection()->clock(), &crypto_proof_, std::move(cb)); | 165 session()->connection()->clock(), crypto_proof_, std::move(cb)); |
124 } | 166 } |
125 | 167 |
126 class QuicCryptoServerStream::ProcessClientHelloCallback | |
127 : public ProcessClientHelloResultCallback { | |
128 public: | |
129 ProcessClientHelloCallback( | |
130 QuicCryptoServerStream* stream, | |
131 const scoped_refptr<ValidateClientHelloResultCallback::Result>& result) | |
132 : stream_(stream), result_(result) {} | |
133 | |
134 void Run( | |
135 QuicErrorCode error, | |
136 const string& error_details, | |
137 std::unique_ptr<CryptoHandshakeMessage> message, | |
138 std::unique_ptr<DiversificationNonce> diversification_nonce) override { | |
139 stream_->FinishProcessingHandshakeMessageAfterProcessClientHello( | |
140 *result_, error, error_details, std::move(message), | |
141 std::move(diversification_nonce)); | |
142 } | |
143 | |
144 private: | |
145 QuicCryptoServerStream* stream_; | |
146 scoped_refptr<ValidateClientHelloResultCallback::Result> result_; | |
147 }; | |
148 | |
149 void QuicCryptoServerStream::FinishProcessingHandshakeMessage( | 168 void QuicCryptoServerStream::FinishProcessingHandshakeMessage( |
150 scoped_refptr<ValidateClientHelloResultCallback::Result> result, | 169 scoped_refptr<ValidateClientHelloResultCallback::Result> result, |
151 std::unique_ptr<ProofSource::Details> details) { | 170 std::unique_ptr<ProofSource::Details> details) { |
152 const CryptoHandshakeMessage& message = result->client_hello; | 171 const CryptoHandshakeMessage& message = result->client_hello; |
153 | 172 |
154 // Clear the callback that got us here. | 173 // Clear the callback that got us here. |
155 DCHECK(validate_client_hello_cb_ != nullptr); | 174 DCHECK(validate_client_hello_cb_ != nullptr); |
156 validate_client_hello_cb_ = nullptr; | 175 validate_client_hello_cb_ = nullptr; |
157 | 176 |
158 if (use_stateless_rejects_if_peer_supported_) { | 177 if (use_stateless_rejects_if_peer_supported_) { |
159 peer_supports_stateless_rejects_ = DoesPeerSupportStatelessRejects(message); | 178 peer_supports_stateless_rejects_ = DoesPeerSupportStatelessRejects(message); |
160 } | 179 } |
161 | 180 |
162 std::unique_ptr<ProcessClientHelloCallback> cb( | 181 std::unique_ptr<ProcessClientHelloCallback> cb( |
163 new ProcessClientHelloCallback(this, result)); | 182 new ProcessClientHelloCallback(this, result)); |
| 183 process_client_hello_cb_ = cb.get(); |
164 ProcessClientHello(result, std::move(details), std::move(cb)); | 184 ProcessClientHello(result, std::move(details), std::move(cb)); |
165 } | 185 } |
166 | 186 |
167 void QuicCryptoServerStream:: | 187 void QuicCryptoServerStream:: |
168 FinishProcessingHandshakeMessageAfterProcessClientHello( | 188 FinishProcessingHandshakeMessageAfterProcessClientHello( |
169 const ValidateClientHelloResultCallback::Result& result, | 189 const ValidateClientHelloResultCallback::Result& result, |
170 QuicErrorCode error, | 190 QuicErrorCode error, |
171 const string& error_details, | 191 const string& error_details, |
172 std::unique_ptr<CryptoHandshakeMessage> reply, | 192 std::unique_ptr<CryptoHandshakeMessage> reply, |
173 std::unique_ptr<DiversificationNonce> diversification_nonce) { | 193 std::unique_ptr<DiversificationNonce> diversification_nonce) { |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
219 | 239 |
220 config->ToHandshakeMessage(reply.get()); | 240 config->ToHandshakeMessage(reply.get()); |
221 | 241 |
222 // Receiving a full CHLO implies the client is prepared to decrypt with | 242 // Receiving a full CHLO implies the client is prepared to decrypt with |
223 // the new server write key. We can start to encrypt with the new server | 243 // the new server write key. We can start to encrypt with the new server |
224 // write key. | 244 // write key. |
225 // | 245 // |
226 // NOTE: the SHLO will be encrypted with the new server write key. | 246 // NOTE: the SHLO will be encrypted with the new server write key. |
227 session()->connection()->SetEncrypter( | 247 session()->connection()->SetEncrypter( |
228 ENCRYPTION_INITIAL, | 248 ENCRYPTION_INITIAL, |
229 crypto_negotiated_params_.initial_crypters.encrypter.release()); | 249 crypto_negotiated_params_->initial_crypters.encrypter.release()); |
230 session()->connection()->SetDefaultEncryptionLevel(ENCRYPTION_INITIAL); | 250 session()->connection()->SetDefaultEncryptionLevel(ENCRYPTION_INITIAL); |
231 // Set the decrypter immediately so that we no longer accept unencrypted | 251 // Set the decrypter immediately so that we no longer accept unencrypted |
232 // packets. | 252 // packets. |
233 session()->connection()->SetDecrypter( | 253 session()->connection()->SetDecrypter( |
234 ENCRYPTION_INITIAL, | 254 ENCRYPTION_INITIAL, |
235 crypto_negotiated_params_.initial_crypters.decrypter.release()); | 255 crypto_negotiated_params_->initial_crypters.decrypter.release()); |
236 if (version() > QUIC_VERSION_32) { | 256 if (version() > QUIC_VERSION_32) { |
237 session()->connection()->SetDiversificationNonce(*diversification_nonce); | 257 session()->connection()->SetDiversificationNonce(*diversification_nonce); |
238 } | 258 } |
239 | 259 |
240 SendHandshakeMessage(*reply); | 260 SendHandshakeMessage(*reply); |
241 | 261 |
242 session()->connection()->SetEncrypter( | 262 session()->connection()->SetEncrypter( |
243 ENCRYPTION_FORWARD_SECURE, | 263 ENCRYPTION_FORWARD_SECURE, |
244 crypto_negotiated_params_.forward_secure_crypters.encrypter.release()); | 264 crypto_negotiated_params_->forward_secure_crypters.encrypter.release()); |
245 session()->connection()->SetDefaultEncryptionLevel(ENCRYPTION_FORWARD_SECURE); | 265 session()->connection()->SetDefaultEncryptionLevel(ENCRYPTION_FORWARD_SECURE); |
246 | 266 |
247 session()->connection()->SetAlternativeDecrypter( | 267 session()->connection()->SetAlternativeDecrypter( |
248 ENCRYPTION_FORWARD_SECURE, | 268 ENCRYPTION_FORWARD_SECURE, |
249 crypto_negotiated_params_.forward_secure_crypters.decrypter.release(), | 269 crypto_negotiated_params_->forward_secure_crypters.decrypter.release(), |
250 false /* don't latch */); | 270 false /* don't latch */); |
251 | 271 |
252 encryption_established_ = true; | 272 encryption_established_ = true; |
253 handshake_confirmed_ = true; | 273 handshake_confirmed_ = true; |
254 session()->OnCryptoHandshakeEvent(QuicSession::HANDSHAKE_CONFIRMED); | 274 session()->OnCryptoHandshakeEvent(QuicSession::HANDSHAKE_CONFIRMED); |
255 } | 275 } |
256 | 276 |
257 void QuicCryptoServerStream::SendServerConfigUpdate( | 277 void QuicCryptoServerStream::SendServerConfigUpdate( |
258 const CachedNetworkParameters* cached_network_params) { | 278 const CachedNetworkParameters* cached_network_params) { |
259 if (!handshake_confirmed_) { | 279 if (!handshake_confirmed_) { |
(...skipping 10 matching lines...) Expand all Loading... |
270 std::unique_ptr<SendServerConfigUpdateCallback> cb( | 290 std::unique_ptr<SendServerConfigUpdateCallback> cb( |
271 new SendServerConfigUpdateCallback(this)); | 291 new SendServerConfigUpdateCallback(this)); |
272 send_server_config_update_cb_ = cb.get(); | 292 send_server_config_update_cb_ = cb.get(); |
273 crypto_config_->BuildServerConfigUpdateMessage( | 293 crypto_config_->BuildServerConfigUpdateMessage( |
274 session()->connection()->version(), chlo_hash_, | 294 session()->connection()->version(), chlo_hash_, |
275 previous_source_address_tokens_, | 295 previous_source_address_tokens_, |
276 session()->connection()->self_address().address(), | 296 session()->connection()->self_address().address(), |
277 session()->connection()->peer_address().address(), | 297 session()->connection()->peer_address().address(), |
278 session()->connection()->clock(), | 298 session()->connection()->clock(), |
279 session()->connection()->random_generator(), compressed_certs_cache_, | 299 session()->connection()->random_generator(), compressed_certs_cache_, |
280 crypto_negotiated_params_, cached_network_params, std::move(cb)); | 300 *crypto_negotiated_params_, cached_network_params, std::move(cb)); |
281 return; | 301 return; |
282 } | 302 } |
283 | 303 |
284 CryptoHandshakeMessage server_config_update_message; | 304 CryptoHandshakeMessage server_config_update_message; |
285 if (!crypto_config_->BuildServerConfigUpdateMessage( | 305 if (!crypto_config_->BuildServerConfigUpdateMessage( |
286 session()->connection()->version(), chlo_hash_, | 306 session()->connection()->version(), chlo_hash_, |
287 previous_source_address_tokens_, | 307 previous_source_address_tokens_, |
288 session()->connection()->self_address().address(), | 308 session()->connection()->self_address().address(), |
289 session()->connection()->peer_address().address(), | 309 session()->connection()->peer_address().address(), |
290 session()->connection()->clock(), | 310 session()->connection()->clock(), |
291 session()->connection()->random_generator(), compressed_certs_cache_, | 311 session()->connection()->random_generator(), compressed_certs_cache_, |
292 crypto_negotiated_params_, cached_network_params, | 312 *crypto_negotiated_params_, cached_network_params, |
293 &server_config_update_message)) { | 313 &server_config_update_message)) { |
294 DVLOG(1) << "Server: Failed to build server config update (SCUP)!"; | 314 DVLOG(1) << "Server: Failed to build server config update (SCUP)!"; |
295 return; | 315 return; |
296 } | 316 } |
297 | 317 |
298 DVLOG(1) << "Server: Sending server config update: " | 318 DVLOG(1) << "Server: Sending server config update: " |
299 << server_config_update_message.DebugString(); | 319 << server_config_update_message.DebugString(); |
300 const QuicData& data = server_config_update_message.GetSerialized(); | 320 const QuicData& data = server_config_update_message.GetSerialized(); |
301 WriteOrBufferData(StringPiece(data.data(), data.length()), false, nullptr); | 321 WriteOrBufferData(StringPiece(data.data(), data.length()), false, nullptr); |
302 | 322 |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
376 | 396 |
377 void QuicCryptoServerStream::SetPreviousCachedNetworkParams( | 397 void QuicCryptoServerStream::SetPreviousCachedNetworkParams( |
378 CachedNetworkParameters cached_network_params) { | 398 CachedNetworkParameters cached_network_params) { |
379 previous_cached_network_params_.reset( | 399 previous_cached_network_params_.reset( |
380 new CachedNetworkParameters(cached_network_params)); | 400 new CachedNetworkParameters(cached_network_params)); |
381 } | 401 } |
382 | 402 |
383 bool QuicCryptoServerStream::GetBase64SHA256ClientChannelID( | 403 bool QuicCryptoServerStream::GetBase64SHA256ClientChannelID( |
384 string* output) const { | 404 string* output) const { |
385 if (!encryption_established_ || | 405 if (!encryption_established_ || |
386 crypto_negotiated_params_.channel_id.empty()) { | 406 crypto_negotiated_params_->channel_id.empty()) { |
387 return false; | 407 return false; |
388 } | 408 } |
389 | 409 |
390 const string& channel_id(crypto_negotiated_params_.channel_id); | 410 const string& channel_id(crypto_negotiated_params_->channel_id); |
391 std::unique_ptr<crypto::SecureHash> hash( | 411 std::unique_ptr<crypto::SecureHash> hash( |
392 crypto::SecureHash::Create(crypto::SecureHash::SHA256)); | 412 crypto::SecureHash::Create(crypto::SecureHash::SHA256)); |
393 hash->Update(channel_id.data(), channel_id.size()); | 413 hash->Update(channel_id.data(), channel_id.size()); |
394 uint8_t digest[32]; | 414 uint8_t digest[32]; |
395 hash->Finish(digest, sizeof(digest)); | 415 hash->Finish(digest, sizeof(digest)); |
396 | 416 |
397 base::Base64Encode( | 417 base::Base64Encode( |
398 string(reinterpret_cast<const char*>(digest), sizeof(digest)), output); | 418 string(reinterpret_cast<const char*>(digest), sizeof(digest)), output); |
399 // Remove padding. | 419 // Remove padding. |
400 size_t len = output->size(); | 420 size_t len = output->size(); |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
437 peer_supports_stateless_rejects_; | 457 peer_supports_stateless_rejects_; |
438 QuicConnection* connection = session()->connection(); | 458 QuicConnection* connection = session()->connection(); |
439 const QuicConnectionId server_designated_connection_id = | 459 const QuicConnectionId server_designated_connection_id = |
440 GenerateConnectionIdForReject(use_stateless_rejects_in_crypto_config); | 460 GenerateConnectionIdForReject(use_stateless_rejects_in_crypto_config); |
441 crypto_config_->ProcessClientHello( | 461 crypto_config_->ProcessClientHello( |
442 result, /*reject_only=*/false, connection->connection_id(), | 462 result, /*reject_only=*/false, connection->connection_id(), |
443 connection->self_address().address(), connection->peer_address(), | 463 connection->self_address().address(), connection->peer_address(), |
444 version(), connection->supported_versions(), | 464 version(), connection->supported_versions(), |
445 use_stateless_rejects_in_crypto_config, server_designated_connection_id, | 465 use_stateless_rejects_in_crypto_config, server_designated_connection_id, |
446 connection->clock(), connection->random_generator(), | 466 connection->clock(), connection->random_generator(), |
447 compressed_certs_cache_, &crypto_negotiated_params_, &crypto_proof_, | 467 compressed_certs_cache_, crypto_negotiated_params_, crypto_proof_, |
448 QuicCryptoStream::CryptoMessageFramingOverhead(version()), | 468 QuicCryptoStream::CryptoMessageFramingOverhead(version()), |
449 chlo_packet_size_, std::move(done_cb)); | 469 chlo_packet_size_, std::move(done_cb)); |
450 } | 470 } |
451 | 471 |
452 void QuicCryptoServerStream::OverrideQuicConfigDefaults(QuicConfig* config) {} | 472 void QuicCryptoServerStream::OverrideQuicConfigDefaults(QuicConfig* config) {} |
453 | 473 |
454 QuicCryptoServerStream::ValidateCallback::ValidateCallback( | 474 QuicCryptoServerStream::ValidateCallback::ValidateCallback( |
455 QuicCryptoServerStream* parent) | 475 QuicCryptoServerStream* parent) |
456 : parent_(parent) {} | 476 : parent_(parent) {} |
457 | 477 |
(...skipping 13 matching lines...) Expand all Loading... |
471 QuicConnectionId QuicCryptoServerStream::GenerateConnectionIdForReject( | 491 QuicConnectionId QuicCryptoServerStream::GenerateConnectionIdForReject( |
472 bool use_stateless_rejects) { | 492 bool use_stateless_rejects) { |
473 if (!use_stateless_rejects) { | 493 if (!use_stateless_rejects) { |
474 return 0; | 494 return 0; |
475 } | 495 } |
476 return helper_->GenerateConnectionIdForReject( | 496 return helper_->GenerateConnectionIdForReject( |
477 session()->connection()->connection_id()); | 497 session()->connection()->connection_id()); |
478 } | 498 } |
479 | 499 |
480 } // namespace net | 500 } // namespace net |
OLD | NEW |