Chromium Code Reviews| Index: net/quic/core/crypto/quic_crypto_server_config.cc |
| diff --git a/net/quic/core/crypto/quic_crypto_server_config.cc b/net/quic/core/crypto/quic_crypto_server_config.cc |
| index 695223a610c70b9509ad5fe15b91a283c3b8c5f3..f2db4f53d2681373a2516331feddc2a0c40e1a76 100644 |
| --- a/net/quic/core/crypto/quic_crypto_server_config.cc |
| +++ b/net/quic/core/crypto/quic_crypto_server_config.cc |
| @@ -81,12 +81,12 @@ IPAddress DualstackIPAddress(const IPAddress& ip) { |
| class ValidateClientHelloHelper { |
| public: |
| - // Note: stores pointers to unique_ptrs, and std::moves the unique_ptrs when |
| + // Note: stores a pointer to a unique_ptr, and std::moves the unique_ptr when |
| // ValidationComplete is called. |
| ValidateClientHelloHelper( |
| - std::unique_ptr<ValidateClientHelloResultCallback::Result>* result, |
| + scoped_refptr<ValidateClientHelloResultCallback::Result> result, |
| std::unique_ptr<ValidateClientHelloResultCallback>* done_cb) |
| - : result_(result), done_cb_(done_cb) {} |
| + : result_(std::move(result)), done_cb_(done_cb) {} |
|
Ryan Hamilton
2016/09/19 22:35:49
ditto.
Jana
2016/09/20 21:28:52
Acknowledged.
|
| ~ValidateClientHelloHelper() { |
| QUIC_BUG_IF(done_cb_ != nullptr) |
| @@ -97,9 +97,9 @@ class ValidateClientHelloHelper { |
| QuicErrorCode error_code, |
| const char* error_details, |
| std::unique_ptr<ProofSource::Details> proof_source_details) { |
| - (*result_)->error_code = error_code; |
| - (*result_)->error_details = error_details; |
| - (*done_cb_)->Run(std::move(*result_), std::move(proof_source_details)); |
| + result_->error_code = error_code; |
| + result_->error_details = error_details; |
| + (*done_cb_)->Run(std::move(result_), std::move(proof_source_details)); |
| DetachCallback(); |
| } |
| @@ -109,7 +109,7 @@ class ValidateClientHelloHelper { |
| } |
| private: |
| - std::unique_ptr<ValidateClientHelloResultCallback::Result>* result_; |
| + scoped_refptr<ValidateClientHelloResultCallback::Result> result_; |
| std::unique_ptr<ValidateClientHelloResultCallback>* done_cb_; |
| DISALLOW_COPY_AND_ASSIGN(ValidateClientHelloHelper); |
| @@ -119,7 +119,7 @@ class VerifyNonceIsValidAndUniqueCallback |
| : public StrikeRegisterClient::ResultCallback { |
| public: |
| VerifyNonceIsValidAndUniqueCallback( |
| - std::unique_ptr<ValidateClientHelloResultCallback::Result> result, |
| + scoped_refptr<ValidateClientHelloResultCallback::Result> result, |
| std::unique_ptr<ProofSource::Details> proof_source_details, |
| std::unique_ptr<ValidateClientHelloResultCallback> done_cb) |
| : result_(std::move(result)), |
| @@ -163,11 +163,11 @@ class VerifyNonceIsValidAndUniqueCallback |
| } |
| result_->info.reject_reasons.push_back(client_nonce_error); |
| } |
| - done_cb_->Run(std::move(result_), std::move(proof_source_details_)); |
| + done_cb_->Run(result_, std::move(proof_source_details_)); |
| } |
| private: |
| - std::unique_ptr<ValidateClientHelloResultCallback::Result> result_; |
| + scoped_refptr<ValidateClientHelloResultCallback::Result> result_; |
| std::unique_ptr<ProofSource::Details> proof_source_details_; |
| std::unique_ptr<ValidateClientHelloResultCallback> done_cb_; |
| @@ -503,7 +503,7 @@ void QuicCryptoServerConfig::ValidateClientHello( |
| std::unique_ptr<ValidateClientHelloResultCallback> done_cb) const { |
| const QuicWallTime now(clock->WallNow()); |
| - std::unique_ptr<ValidateClientHelloResultCallback::Result> result( |
| + scoped_refptr<ValidateClientHelloResultCallback::Result> result( |
| new ValidateClientHelloResultCallback::Result(client_hello, client_ip, |
| now)); |
| @@ -544,15 +544,16 @@ void QuicCryptoServerConfig::ValidateClientHello( |
| crypto_proof->cert_sct = ""; |
| } |
| EvaluateClientHello(server_ip, version, primary_orbit, requested_config, |
| - primary_config, crypto_proof, std::move(result), |
| + primary_config, crypto_proof, result, |
| std::move(done_cb)); |
| } else { |
| - done_cb->Run(std::move(result), /* details = */ nullptr); |
| + done_cb->Run(result, /* details = */ nullptr); |
| } |
| } |
| QuicErrorCode QuicCryptoServerConfig::ProcessClientHello( |
| - const ValidateClientHelloResultCallback::Result& validate_chlo_result, |
| + scoped_refptr<ValidateClientHelloResultCallback::Result> |
| + validate_chlo_result, |
| bool reject_only, |
| QuicConnectionId connection_id, |
| const IPAddress& server_ip, |
| @@ -574,8 +575,8 @@ QuicErrorCode QuicCryptoServerConfig::ProcessClientHello( |
| DCHECK(error_details); |
| const CryptoHandshakeMessage& client_hello = |
| - validate_chlo_result.client_hello; |
| - const ClientHelloInfo& info = validate_chlo_result.info; |
| + validate_chlo_result->client_hello; |
| + const ClientHelloInfo& info = validate_chlo_result->info; |
| QuicErrorCode valid = CryptoUtils::ValidateClientHello( |
| client_hello, version, supported_versions, error_details); |
| @@ -609,9 +610,9 @@ QuicErrorCode QuicCryptoServerConfig::ProcessClientHello( |
| requested_config = GetConfigWithScid(requested_scid); |
| } |
| - if (validate_chlo_result.error_code != QUIC_NO_ERROR) { |
| - *error_details = validate_chlo_result.error_details; |
| - return validate_chlo_result.error_code; |
| + if (validate_chlo_result->error_code != QUIC_NO_ERROR) { |
| + *error_details = validate_chlo_result->error_details; |
| + return validate_chlo_result->error_code; |
| } |
| out->Clear(); |
| @@ -640,7 +641,7 @@ QuicErrorCode QuicCryptoServerConfig::ProcessClientHello( |
| if (!info.reject_reasons.empty() || !requested_config.get()) { |
| BuildRejection(version, clock->WallNow(), *primary_config, client_hello, |
| - info, validate_chlo_result.cached_network_params, |
| + info, validate_chlo_result->cached_network_params, |
| use_stateless_rejects, server_designated_connection_id, rand, |
| compressed_certs_cache, params, *crypto_proof, |
| total_framing_overhead, chlo_packet_size, out); |
| @@ -794,7 +795,6 @@ QuicErrorCode QuicCryptoServerConfig::ProcessClientHello( |
| hkdf_input.append(QuicCryptoConfig::kInitialLabel, label_len); |
| hkdf_input.append(hkdf_suffix); |
| - string* subkey_secret = ¶ms->initial_subkey_secret; |
| CryptoUtils::Diversification diversification = |
| CryptoUtils::Diversification::Never(); |
| if (version > QUIC_VERSION_32) { |
| @@ -807,7 +807,8 @@ QuicErrorCode QuicCryptoServerConfig::ProcessClientHello( |
| if (!CryptoUtils::DeriveKeys(params->initial_premaster_secret, params->aead, |
| info.client_nonce, info.server_nonce, hkdf_input, |
| Perspective::IS_SERVER, diversification, |
| - ¶ms->initial_crypters, subkey_secret)) { |
| + ¶ms->initial_crypters, |
| + ¶ms->initial_subkey_secret)) { |
| *error_details = "Symmetric key setup failed"; |
| return QUIC_CRYPTO_SYMMETRIC_KEY_SETUP_FAILED; |
| } |
| @@ -990,7 +991,8 @@ void QuicCryptoServerConfig::SelectNewPrimaryConfig( |
| } |
| } |
| -class EvaluateClientHelloCallback : public ProofSource::Callback { |
| +class QuicCryptoServerConfig::EvaluateClientHelloCallback |
| + : public ProofSource::Callback { |
| public: |
| EvaluateClientHelloCallback( |
| const QuicCryptoServerConfig& config, |
| @@ -1001,7 +1003,7 @@ class EvaluateClientHelloCallback : public ProofSource::Callback { |
| scoped_refptr<QuicCryptoServerConfig::Config> requested_config, |
| scoped_refptr<QuicCryptoServerConfig::Config> primary_config, |
| QuicCryptoProof* crypto_proof, |
| - std::unique_ptr<ValidateClientHelloResultCallback::Result> |
| + scoped_refptr<ValidateClientHelloResultCallback::Result> |
| client_hello_state, |
| std::unique_ptr<ValidateClientHelloResultCallback> done_cb) |
| : config_(config), |
| @@ -1040,8 +1042,7 @@ class EvaluateClientHelloCallback : public ProofSource::Callback { |
| const scoped_refptr<QuicCryptoServerConfig::Config> requested_config_; |
| const scoped_refptr<QuicCryptoServerConfig::Config> primary_config_; |
| QuicCryptoProof* crypto_proof_; |
| - std::unique_ptr<ValidateClientHelloResultCallback::Result> |
| - client_hello_state_; |
| + scoped_refptr<ValidateClientHelloResultCallback::Result> client_hello_state_; |
| std::unique_ptr<ValidateClientHelloResultCallback> done_cb_; |
| }; |
| @@ -1052,10 +1053,9 @@ void QuicCryptoServerConfig::EvaluateClientHello( |
| scoped_refptr<Config> requested_config, |
| scoped_refptr<Config> primary_config, |
| QuicCryptoProof* crypto_proof, |
| - std::unique_ptr<ValidateClientHelloResultCallback::Result> |
| - client_hello_state, |
| + scoped_refptr<ValidateClientHelloResultCallback::Result> client_hello_state, |
| std::unique_ptr<ValidateClientHelloResultCallback> done_cb) const { |
| - ValidateClientHelloHelper helper(&client_hello_state, &done_cb); |
| + ValidateClientHelloHelper helper(client_hello_state, &done_cb); |
| const CryptoHandshakeMessage& client_hello = client_hello_state->client_hello; |
| ClientHelloInfo* info = &(client_hello_state->info); |
| @@ -1170,10 +1170,9 @@ void QuicCryptoServerConfig::EvaluateClientHelloAfterGetProof( |
| QuicCryptoProof* crypto_proof, |
| std::unique_ptr<ProofSource::Details> proof_source_details, |
| bool get_proof_failed, |
| - std::unique_ptr<ValidateClientHelloResultCallback::Result> |
| - client_hello_state, |
| + scoped_refptr<ValidateClientHelloResultCallback::Result> client_hello_state, |
| std::unique_ptr<ValidateClientHelloResultCallback> done_cb) const { |
| - ValidateClientHelloHelper helper(&client_hello_state, &done_cb); |
| + ValidateClientHelloHelper helper(client_hello_state, &done_cb); |
| const CryptoHandshakeMessage& client_hello = client_hello_state->client_hello; |
| ClientHelloInfo* info = &(client_hello_state->info); |