| 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 4311296cd77d8f758d528803530ab3b68f4379eb..61dc3b8b51b65a8eb7733c7b380ef60fb72f7998 100644
|
| --- a/net/quic/core/crypto/quic_crypto_server_config.cc
|
| +++ b/net/quic/core/crypto/quic_crypto_server_config.cc
|
| @@ -10,7 +10,6 @@
|
| #include <memory>
|
|
|
| #include "base/macros.h"
|
| -#include "base/memory/ref_counted.h"
|
| #include "crypto/hkdf.h"
|
| #include "crypto/secure_hash.h"
|
| #include "net/base/ip_address.h"
|
| @@ -38,6 +37,7 @@
|
| #include "net/quic/core/quic_socket_address_coder.h"
|
| #include "net/quic/core/quic_utils.h"
|
| #include "net/quic/platform/api/quic_clock.h"
|
| +#include "net/quic/platform/api/quic_reference_counted.h"
|
|
|
| using base::StringPiece;
|
| using crypto::SecureHash;
|
| @@ -70,7 +70,8 @@ class ValidateClientHelloHelper {
|
| // Note: stores a pointer to a unique_ptr, and std::moves the unique_ptr when
|
| // ValidationComplete is called.
|
| ValidateClientHelloHelper(
|
| - scoped_refptr<ValidateClientHelloResultCallback::Result> result,
|
| + QuicReferenceCountedPointer<ValidateClientHelloResultCallback::Result>
|
| + result,
|
| std::unique_ptr<ValidateClientHelloResultCallback>* done_cb)
|
| : result_(std::move(result)), done_cb_(done_cb) {}
|
|
|
| @@ -95,7 +96,8 @@ class ValidateClientHelloHelper {
|
| }
|
|
|
| private:
|
| - scoped_refptr<ValidateClientHelloResultCallback::Result> result_;
|
| + QuicReferenceCountedPointer<ValidateClientHelloResultCallback::Result>
|
| + result_;
|
| std::unique_ptr<ValidateClientHelloResultCallback>* done_cb_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(ValidateClientHelloHelper);
|
| @@ -302,7 +304,7 @@ CryptoHandshakeMessage* QuicCryptoServerConfig::AddConfig(
|
| return nullptr;
|
| }
|
|
|
| - scoped_refptr<Config> config(ParseConfigProtobuf(protobuf));
|
| + QuicReferenceCountedPointer<Config> config(ParseConfigProtobuf(protobuf));
|
| if (!config.get()) {
|
| LOG(WARNING) << "Failed to parse server config message";
|
| return nullptr;
|
| @@ -337,12 +339,12 @@ CryptoHandshakeMessage* QuicCryptoServerConfig::AddDefaultConfig(
|
| bool QuicCryptoServerConfig::SetConfigs(
|
| const std::vector<std::unique_ptr<QuicServerConfigProtobuf>>& protobufs,
|
| const QuicWallTime now) {
|
| - std::vector<scoped_refptr<Config>> parsed_configs;
|
| + std::vector<QuicReferenceCountedPointer<Config>> parsed_configs;
|
| bool ok = true;
|
|
|
| for (auto& protobuf : protobufs) {
|
| - scoped_refptr<Config> config(ParseConfigProtobuf(protobuf));
|
| - if (!config.get()) {
|
| + QuicReferenceCountedPointer<Config> config(ParseConfigProtobuf(protobuf));
|
| + if (!config) {
|
| ok = false;
|
| break;
|
| }
|
| @@ -363,10 +365,10 @@ bool QuicCryptoServerConfig::SetConfigs(
|
| QuicWriterMutexLock locked(&configs_lock_);
|
| ConfigMap new_configs;
|
|
|
| - for (std::vector<scoped_refptr<Config>>::const_iterator i =
|
| + for (std::vector<QuicReferenceCountedPointer<Config>>::const_iterator i =
|
| parsed_configs.begin();
|
| i != parsed_configs.end(); ++i) {
|
| - scoped_refptr<Config> config = *i;
|
| + QuicReferenceCountedPointer<Config> config = *i;
|
|
|
| ConfigMap::iterator it = configs_.find(config->id);
|
| if (it != configs_.end()) {
|
| @@ -422,19 +424,19 @@ void QuicCryptoServerConfig::ValidateClientHello(
|
| const QuicSocketAddress& server_address,
|
| QuicVersion version,
|
| const QuicClock* clock,
|
| - scoped_refptr<QuicSignedServerConfig> signed_config,
|
| + QuicReferenceCountedPointer<QuicSignedServerConfig> signed_config,
|
| std::unique_ptr<ValidateClientHelloResultCallback> done_cb) const {
|
| const QuicWallTime now(clock->WallNow());
|
|
|
| - scoped_refptr<ValidateClientHelloResultCallback::Result> result(
|
| + QuicReferenceCountedPointer<ValidateClientHelloResultCallback::Result> result(
|
| new ValidateClientHelloResultCallback::Result(client_hello, client_ip,
|
| now));
|
|
|
| StringPiece requested_scid;
|
| client_hello.GetStringPiece(kSCID, &requested_scid);
|
|
|
| - scoped_refptr<Config> requested_config;
|
| - scoped_refptr<Config> primary_config;
|
| + QuicReferenceCountedPointer<Config> requested_config;
|
| + QuicReferenceCountedPointer<Config> primary_config;
|
| {
|
| QuicReaderMutexLock locked(&configs_lock_);
|
|
|
| @@ -512,7 +514,7 @@ class QuicCryptoServerConfig::ProcessClientHelloCallback
|
| public:
|
| ProcessClientHelloCallback(
|
| const QuicCryptoServerConfig* config,
|
| - scoped_refptr<ValidateClientHelloResultCallback::Result>
|
| + QuicReferenceCountedPointer<ValidateClientHelloResultCallback::Result>
|
| validate_chlo_result,
|
| bool reject_only,
|
| QuicConnectionId connection_id,
|
| @@ -524,12 +526,14 @@ class QuicCryptoServerConfig::ProcessClientHelloCallback
|
| const QuicClock* clock,
|
| QuicRandom* rand,
|
| QuicCompressedCertsCache* compressed_certs_cache,
|
| - scoped_refptr<QuicCryptoNegotiatedParameters> params,
|
| - scoped_refptr<QuicSignedServerConfig> signed_config,
|
| + QuicReferenceCountedPointer<QuicCryptoNegotiatedParameters> params,
|
| + QuicReferenceCountedPointer<QuicSignedServerConfig> signed_config,
|
| QuicByteCount total_framing_overhead,
|
| QuicByteCount chlo_packet_size,
|
| - const scoped_refptr<QuicCryptoServerConfig::Config>& requested_config,
|
| - const scoped_refptr<QuicCryptoServerConfig::Config>& primary_config,
|
| + const QuicReferenceCountedPointer<QuicCryptoServerConfig::Config>&
|
| + requested_config,
|
| + const QuicReferenceCountedPointer<QuicCryptoServerConfig::Config>&
|
| + primary_config,
|
| std::unique_ptr<ProcessClientHelloResultCallback> done_cb)
|
| : config_(config),
|
| validate_chlo_result_(std::move(validate_chlo_result)),
|
| @@ -552,7 +556,7 @@ class QuicCryptoServerConfig::ProcessClientHelloCallback
|
| done_cb_(std::move(done_cb)) {}
|
|
|
| void Run(bool ok,
|
| - const scoped_refptr<ProofSource::Chain>& chain,
|
| + const QuicReferenceCountedPointer<ProofSource::Chain>& chain,
|
| const QuicCryptoProof& proof,
|
| std::unique_ptr<ProofSource::Details> details) override {
|
| if (ok) {
|
| @@ -570,7 +574,7 @@ class QuicCryptoServerConfig::ProcessClientHelloCallback
|
|
|
| private:
|
| const QuicCryptoServerConfig* config_;
|
| - const scoped_refptr<ValidateClientHelloResultCallback::Result>
|
| + const QuicReferenceCountedPointer<ValidateClientHelloResultCallback::Result>
|
| validate_chlo_result_;
|
| const bool reject_only_;
|
| const QuicConnectionId connection_id_;
|
| @@ -582,17 +586,19 @@ class QuicCryptoServerConfig::ProcessClientHelloCallback
|
| const QuicClock* const clock_;
|
| QuicRandom* const rand_;
|
| QuicCompressedCertsCache* compressed_certs_cache_;
|
| - scoped_refptr<QuicCryptoNegotiatedParameters> params_;
|
| - scoped_refptr<QuicSignedServerConfig> signed_config_;
|
| + QuicReferenceCountedPointer<QuicCryptoNegotiatedParameters> params_;
|
| + QuicReferenceCountedPointer<QuicSignedServerConfig> signed_config_;
|
| const QuicByteCount total_framing_overhead_;
|
| const QuicByteCount chlo_packet_size_;
|
| - const scoped_refptr<QuicCryptoServerConfig::Config> requested_config_;
|
| - const scoped_refptr<QuicCryptoServerConfig::Config> primary_config_;
|
| + const QuicReferenceCountedPointer<QuicCryptoServerConfig::Config>
|
| + requested_config_;
|
| + const QuicReferenceCountedPointer<QuicCryptoServerConfig::Config>
|
| + primary_config_;
|
| std::unique_ptr<ProcessClientHelloResultCallback> done_cb_;
|
| };
|
|
|
| void QuicCryptoServerConfig::ProcessClientHello(
|
| - scoped_refptr<ValidateClientHelloResultCallback::Result>
|
| + QuicReferenceCountedPointer<ValidateClientHelloResultCallback::Result>
|
| validate_chlo_result,
|
| bool reject_only,
|
| QuicConnectionId connection_id,
|
| @@ -605,8 +611,8 @@ void QuicCryptoServerConfig::ProcessClientHello(
|
| const QuicClock* clock,
|
| QuicRandom* rand,
|
| QuicCompressedCertsCache* compressed_certs_cache,
|
| - scoped_refptr<QuicCryptoNegotiatedParameters> params,
|
| - scoped_refptr<QuicSignedServerConfig> signed_config,
|
| + QuicReferenceCountedPointer<QuicCryptoNegotiatedParameters> params,
|
| + QuicReferenceCountedPointer<QuicSignedServerConfig> signed_config,
|
| QuicByteCount total_framing_overhead,
|
| QuicByteCount chlo_packet_size,
|
| std::unique_ptr<ProcessClientHelloResultCallback> done_cb) const {
|
| @@ -630,8 +636,8 @@ void QuicCryptoServerConfig::ProcessClientHello(
|
| client_hello.GetStringPiece(kSCID, &requested_scid);
|
| const QuicWallTime now(clock->WallNow());
|
|
|
| - scoped_refptr<Config> requested_config;
|
| - scoped_refptr<Config> primary_config;
|
| + QuicReferenceCountedPointer<Config> requested_config;
|
| + QuicReferenceCountedPointer<Config> primary_config;
|
| bool no_primary_config = false;
|
| {
|
| QuicReaderMutexLock locked(&configs_lock_);
|
| @@ -735,12 +741,12 @@ void QuicCryptoServerConfig::ProcessClientHelloAfterGetProof(
|
| const QuicClock* clock,
|
| QuicRandom* rand,
|
| QuicCompressedCertsCache* compressed_certs_cache,
|
| - scoped_refptr<QuicCryptoNegotiatedParameters> params,
|
| - scoped_refptr<QuicSignedServerConfig> signed_config,
|
| + QuicReferenceCountedPointer<QuicCryptoNegotiatedParameters> params,
|
| + QuicReferenceCountedPointer<QuicSignedServerConfig> signed_config,
|
| QuicByteCount total_framing_overhead,
|
| QuicByteCount chlo_packet_size,
|
| - const scoped_refptr<Config>& requested_config,
|
| - const scoped_refptr<Config>& primary_config,
|
| + const QuicReferenceCountedPointer<Config>& requested_config,
|
| + const QuicReferenceCountedPointer<Config>& primary_config,
|
| std::unique_ptr<ProcessClientHelloResultCallback> done_cb) const {
|
| ProcessClientHelloHelper helper(&done_cb);
|
|
|
| @@ -1003,7 +1009,7 @@ void QuicCryptoServerConfig::ProcessClientHelloAfterGetProof(
|
| std::move(proof_source_details));
|
| }
|
|
|
| -scoped_refptr<QuicCryptoServerConfig::Config>
|
| +QuicReferenceCountedPointer<QuicCryptoServerConfig::Config>
|
| QuicCryptoServerConfig::GetConfigWithScid(StringPiece requested_scid) const {
|
| configs_lock_.AssertReaderHeld();
|
|
|
| @@ -1012,19 +1018,19 @@ QuicCryptoServerConfig::GetConfigWithScid(StringPiece requested_scid) const {
|
| if (it != configs_.end()) {
|
| // We'll use the config that the client requested in order to do
|
| // key-agreement.
|
| - return scoped_refptr<Config>(it->second);
|
| + return QuicReferenceCountedPointer<Config>(it->second);
|
| }
|
| }
|
|
|
| - return scoped_refptr<Config>();
|
| + return QuicReferenceCountedPointer<Config>();
|
| }
|
|
|
| // ConfigPrimaryTimeLessThan is a comparator that implements "less than" for
|
| // Config's based on their primary_time.
|
| // static
|
| bool QuicCryptoServerConfig::ConfigPrimaryTimeLessThan(
|
| - const scoped_refptr<Config>& a,
|
| - const scoped_refptr<Config>& b) {
|
| + const QuicReferenceCountedPointer<Config>& a,
|
| + const QuicReferenceCountedPointer<Config>& b) {
|
| if (a->primary_time.IsBefore(b->primary_time) ||
|
| b->primary_time.IsBefore(a->primary_time)) {
|
| // Primary times differ.
|
| @@ -1040,7 +1046,7 @@ bool QuicCryptoServerConfig::ConfigPrimaryTimeLessThan(
|
|
|
| void QuicCryptoServerConfig::SelectNewPrimaryConfig(
|
| const QuicWallTime now) const {
|
| - std::vector<scoped_refptr<Config>> configs;
|
| + std::vector<QuicReferenceCountedPointer<Config>> configs;
|
| configs.reserve(configs_.size());
|
|
|
| for (ConfigMap::const_iterator it = configs_.begin(); it != configs_.end();
|
| @@ -1060,10 +1066,10 @@ void QuicCryptoServerConfig::SelectNewPrimaryConfig(
|
|
|
| std::sort(configs.begin(), configs.end(), ConfigPrimaryTimeLessThan);
|
|
|
| - scoped_refptr<Config> best_candidate = configs[0];
|
| + QuicReferenceCountedPointer<Config> best_candidate = configs[0];
|
|
|
| for (size_t i = 0; i < configs.size(); ++i) {
|
| - const scoped_refptr<Config> config(configs[i]);
|
| + const QuicReferenceCountedPointer<Config> config(configs[i]);
|
| if (!config->primary_time.IsAfter(now)) {
|
| if (config->primary_time.IsAfter(best_candidate->primary_time)) {
|
| best_candidate = config;
|
| @@ -1074,7 +1080,7 @@ void QuicCryptoServerConfig::SelectNewPrimaryConfig(
|
| // This is the first config with a primary_time in the future. Thus the
|
| // previous Config should be the primary and this one should determine the
|
| // next_config_promotion_time_.
|
| - scoped_refptr<Config> new_primary = best_candidate;
|
| + QuicReferenceCountedPointer<Config> new_primary = best_candidate;
|
| if (i == 0) {
|
| // We need the primary_time of the next config.
|
| if (configs.size() > 1) {
|
| @@ -1104,8 +1110,8 @@ void QuicCryptoServerConfig::SelectNewPrimaryConfig(
|
|
|
| // All config's primary times are in the past. We should make the most recent
|
| // and highest priority candidate primary.
|
| - scoped_refptr<Config> new_primary = best_candidate;
|
| - if (primary_config_.get()) {
|
| + QuicReferenceCountedPointer<Config> new_primary = best_candidate;
|
| + if (primary_config_) {
|
| primary_config_->is_primary = false;
|
| }
|
| primary_config_ = new_primary;
|
| @@ -1129,10 +1135,12 @@ class QuicCryptoServerConfig::EvaluateClientHelloCallback
|
| bool found_error,
|
| const QuicIpAddress& server_ip,
|
| QuicVersion version,
|
| - scoped_refptr<QuicCryptoServerConfig::Config> requested_config,
|
| - scoped_refptr<QuicCryptoServerConfig::Config> primary_config,
|
| - scoped_refptr<QuicSignedServerConfig> signed_config,
|
| - scoped_refptr<ValidateClientHelloResultCallback::Result>
|
| + QuicReferenceCountedPointer<QuicCryptoServerConfig::Config>
|
| + requested_config,
|
| + QuicReferenceCountedPointer<QuicCryptoServerConfig::Config>
|
| + primary_config,
|
| + QuicReferenceCountedPointer<QuicSignedServerConfig> signed_config,
|
| + QuicReferenceCountedPointer<ValidateClientHelloResultCallback::Result>
|
| client_hello_state,
|
| std::unique_ptr<ValidateClientHelloResultCallback> done_cb)
|
| : config_(config),
|
| @@ -1146,7 +1154,7 @@ class QuicCryptoServerConfig::EvaluateClientHelloCallback
|
| done_cb_(std::move(done_cb)) {}
|
|
|
| void Run(bool ok,
|
| - const scoped_refptr<ProofSource::Chain>& chain,
|
| + const QuicReferenceCountedPointer<ProofSource::Chain>& chain,
|
| const QuicCryptoProof& proof,
|
| std::unique_ptr<ProofSource::Details> details) override {
|
| if (ok) {
|
| @@ -1164,20 +1172,24 @@ class QuicCryptoServerConfig::EvaluateClientHelloCallback
|
| const bool found_error_;
|
| const QuicIpAddress& server_ip_;
|
| const QuicVersion version_;
|
| - const scoped_refptr<QuicCryptoServerConfig::Config> requested_config_;
|
| - const scoped_refptr<QuicCryptoServerConfig::Config> primary_config_;
|
| - scoped_refptr<QuicSignedServerConfig> signed_config_;
|
| - scoped_refptr<ValidateClientHelloResultCallback::Result> client_hello_state_;
|
| + const QuicReferenceCountedPointer<QuicCryptoServerConfig::Config>
|
| + requested_config_;
|
| + const QuicReferenceCountedPointer<QuicCryptoServerConfig::Config>
|
| + primary_config_;
|
| + QuicReferenceCountedPointer<QuicSignedServerConfig> signed_config_;
|
| + QuicReferenceCountedPointer<ValidateClientHelloResultCallback::Result>
|
| + client_hello_state_;
|
| std::unique_ptr<ValidateClientHelloResultCallback> done_cb_;
|
| };
|
|
|
| void QuicCryptoServerConfig::EvaluateClientHello(
|
| const QuicSocketAddress& server_address,
|
| QuicVersion version,
|
| - scoped_refptr<Config> requested_config,
|
| - scoped_refptr<Config> primary_config,
|
| - scoped_refptr<QuicSignedServerConfig> signed_config,
|
| - scoped_refptr<ValidateClientHelloResultCallback::Result> client_hello_state,
|
| + QuicReferenceCountedPointer<Config> requested_config,
|
| + QuicReferenceCountedPointer<Config> primary_config,
|
| + QuicReferenceCountedPointer<QuicSignedServerConfig> signed_config,
|
| + QuicReferenceCountedPointer<ValidateClientHelloResultCallback::Result>
|
| + client_hello_state,
|
| std::unique_ptr<ValidateClientHelloResultCallback> done_cb) const {
|
| ValidateClientHelloHelper helper(client_hello_state, &done_cb);
|
|
|
| @@ -1298,12 +1310,13 @@ void QuicCryptoServerConfig::EvaluateClientHelloAfterGetProof(
|
| bool found_error,
|
| const QuicIpAddress& server_ip,
|
| QuicVersion version,
|
| - scoped_refptr<Config> requested_config,
|
| - scoped_refptr<Config> primary_config,
|
| - scoped_refptr<QuicSignedServerConfig> signed_config,
|
| + QuicReferenceCountedPointer<Config> requested_config,
|
| + QuicReferenceCountedPointer<Config> primary_config,
|
| + QuicReferenceCountedPointer<QuicSignedServerConfig> signed_config,
|
| std::unique_ptr<ProofSource::Details> proof_source_details,
|
| bool get_proof_failed,
|
| - scoped_refptr<ValidateClientHelloResultCallback::Result> client_hello_state,
|
| + QuicReferenceCountedPointer<ValidateClientHelloResultCallback::Result>
|
| + client_hello_state,
|
| std::unique_ptr<ValidateClientHelloResultCallback> done_cb) const {
|
| ValidateClientHelloHelper helper(client_hello_state, &done_cb);
|
| const CryptoHandshakeMessage& client_hello = client_hello_state->client_hello;
|
| @@ -1369,7 +1382,7 @@ bool QuicCryptoServerConfig::BuildServerConfigUpdateMessage(
|
| out->SetValue(kSTTL,
|
| expiry_time.AbsoluteDifference(clock->WallNow()).ToSeconds());
|
|
|
| - scoped_refptr<ProofSource::Chain> chain;
|
| + QuicReferenceCountedPointer<ProofSource::Chain> chain;
|
| QuicCryptoProof proof;
|
| if (!proof_source_->GetProof(server_address, params.sni, serialized, version,
|
| chlo_hash, connection_options, &chain, &proof)) {
|
| @@ -1464,7 +1477,7 @@ QuicCryptoServerConfig::BuildServerConfigUpdateMessageProofSourceCallback::
|
|
|
| void QuicCryptoServerConfig::BuildServerConfigUpdateMessageProofSourceCallback::
|
| Run(bool ok,
|
| - const scoped_refptr<ProofSource::Chain>& chain,
|
| + const QuicReferenceCountedPointer<ProofSource::Chain>& chain,
|
| const QuicCryptoProof& proof,
|
| std::unique_ptr<ProofSource::Details> details) {
|
| config_->FinishBuildServerConfigUpdateMessage(
|
| @@ -1483,7 +1496,7 @@ void QuicCryptoServerConfig::FinishBuildServerConfigUpdateMessage(
|
| const string& client_cached_cert_hashes,
|
| bool sct_supported_by_client,
|
| bool ok,
|
| - const scoped_refptr<ProofSource::Chain>& chain,
|
| + const QuicReferenceCountedPointer<ProofSource::Chain>& chain,
|
| const string& signature,
|
| const string& leaf_cert_sct,
|
| std::unique_ptr<ProofSource::Details> details,
|
| @@ -1522,7 +1535,7 @@ void QuicCryptoServerConfig::BuildRejection(
|
| QuicConnectionId server_designated_connection_id,
|
| QuicRandom* rand,
|
| QuicCompressedCertsCache* compressed_certs_cache,
|
| - scoped_refptr<QuicCryptoNegotiatedParameters> params,
|
| + QuicReferenceCountedPointer<QuicCryptoNegotiatedParameters> params,
|
| const QuicSignedServerConfig& signed_config,
|
| QuicByteCount total_framing_overhead,
|
| QuicByteCount chlo_packet_size,
|
| @@ -1615,7 +1628,7 @@ void QuicCryptoServerConfig::BuildRejection(
|
|
|
| string QuicCryptoServerConfig::CompressChain(
|
| QuicCompressedCertsCache* compressed_certs_cache,
|
| - const scoped_refptr<ProofSource::Chain>& chain,
|
| + const QuicReferenceCountedPointer<ProofSource::Chain>& chain,
|
| const string& client_common_set_hashes,
|
| const string& client_cached_cert_hashes,
|
| const CommonCertSets* common_sets) {
|
| @@ -1637,7 +1650,7 @@ string QuicCryptoServerConfig::CompressChain(
|
| return compressed;
|
| }
|
|
|
| -scoped_refptr<QuicCryptoServerConfig::Config>
|
| +QuicReferenceCountedPointer<QuicCryptoServerConfig::Config>
|
| QuicCryptoServerConfig::ParseConfigProtobuf(
|
| const std::unique_ptr<QuicServerConfigProtobuf>& protobuf) {
|
| std::unique_ptr<CryptoHandshakeMessage> msg(
|
| @@ -1649,7 +1662,7 @@ QuicCryptoServerConfig::ParseConfigProtobuf(
|
| return nullptr;
|
| }
|
|
|
| - scoped_refptr<Config> config(new Config);
|
| + QuicReferenceCountedPointer<Config> config(new Config);
|
| config->serialized = protobuf->config();
|
| config->source_address_token_boxer = &source_address_token_boxer_;
|
|
|
|
|