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

Unified Diff: net/quic/core/crypto/quic_crypto_server_config.cc

Issue 2353763002: Use refcounted ownership for ValidateClientHelloResultCallback::Result (Closed)
Patch Set: Created 4 years, 3 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 side-by-side diff with in-line comments
Download patch
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 = &params->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,
- &params->initial_crypters, subkey_secret)) {
+ &params->initial_crypters,
+ &params->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);

Powered by Google App Engine
This is Rietveld 408576698