| 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 |