summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/http/http_network_session.cc1
-rw-r--r--net/quic/crypto/quic_crypto_client_config.cc23
-rw-r--r--net/quic/crypto/quic_crypto_client_config.h13
-rw-r--r--net/quic/quic_stream_factory.cc5
-rw-r--r--net/quic/quic_stream_factory.h3
-rw-r--r--net/quic/quic_stream_factory_test.cc1
6 files changed, 44 insertions, 2 deletions
diff --git a/net/http/http_network_session.cc b/net/http/http_network_session.cc
index 9c0e8ae..8371ecd 100644
--- a/net/http/http_network_session.cc
+++ b/net/http/http_network_session.cc
@@ -113,6 +113,7 @@ HttpNetworkSession::HttpNetworkSession(const Params& params)
params.client_socket_factory :
net::ClientSocketFactory::GetDefaultFactory(),
params.http_server_properties,
+ params.quic_server_info_factory,
params.quic_crypto_client_stream_factory,
params.quic_random ? params.quic_random :
QuicRandom::GetInstance(),
diff --git a/net/quic/crypto/quic_crypto_client_config.cc b/net/quic/crypto/quic_crypto_client_config.cc
index dd2d04c..84dfee0 100644
--- a/net/quic/crypto/quic_crypto_client_config.cc
+++ b/net/quic/crypto/quic_crypto_client_config.cc
@@ -15,6 +15,7 @@
#include "net/quic/crypto/p256_key_exchange.h"
#include "net/quic/crypto/proof_verifier.h"
#include "net/quic/crypto/quic_encrypter.h"
+#include "net/quic/crypto/quic_server_info.h"
#include "net/quic/quic_utils.h"
#if defined(OS_WIN)
@@ -28,7 +29,14 @@ using std::vector;
namespace net {
-QuicCryptoClientConfig::QuicCryptoClientConfig() {}
+QuicCryptoClientConfig::QuicCryptoClientConfig()
+ : quic_server_info_factory_(NULL) {
+}
+
+QuicCryptoClientConfig::QuicCryptoClientConfig(
+ QuicServerInfoFactory* quic_server_info_factory)
+ : quic_server_info_factory_(quic_server_info_factory) {
+}
QuicCryptoClientConfig::~QuicCryptoClientConfig() {
STLDeleteValues(&cached_states_);
@@ -40,6 +48,16 @@ QuicCryptoClientConfig::CachedState::CachedState()
QuicCryptoClientConfig::CachedState::~CachedState() {}
+void QuicCryptoClientConfig::CachedState::LoadFromDiskCache(
+ QuicServerInfoFactory* quic_server_info_factory,
+ const string& server_hostname) {
+ DCHECK(quic_server_info_factory);
+ quic_server_info_.reset(
+ quic_server_info_factory->GetForHost(server_hostname));
+
+ // TODO(rtenneti): Need to flesh out reading data from disk cache.
+}
+
bool QuicCryptoClientConfig::CachedState::IsComplete(QuicWallTime now) const {
if (server_config_.empty() || !server_config_valid_) {
return false;
@@ -230,6 +248,9 @@ QuicCryptoClientConfig::CachedState* QuicCryptoClientConfig::LookupOrCreate(
}
CachedState* cached = new CachedState;
+ if (quic_server_info_factory_) {
+ cached->LoadFromDiskCache(quic_server_info_factory_, server_hostname);
+ }
cached_states_.insert(make_pair(server_hostname, cached));
return cached;
}
diff --git a/net/quic/crypto/quic_crypto_client_config.h b/net/quic/crypto/quic_crypto_client_config.h
index 30f4cf6..a7c5880 100644
--- a/net/quic/crypto/quic_crypto_client_config.h
+++ b/net/quic/crypto/quic_crypto_client_config.h
@@ -17,6 +17,9 @@
namespace net {
+class QuicServerInfo;
+class QuicServerInfoFactory;
+
// QuicCryptoClientConfig contains crypto-related configuration settings for a
// client. Note that this object isn't thread-safe. It's designed to be used on
// a single thread at a time.
@@ -86,6 +89,11 @@ class NET_EXPORT_PRIVATE QuicCryptoClientConfig : public QuicCryptoConfig {
// unchanged.
void InitializeFrom(const CachedState& other);
+ // TODO(rtenneti): Need to flesh out the details of this method. A temporary
+ // place holder to load CachedState from disk cache.
+ void LoadFromDiskCache(QuicServerInfoFactory* quic_server_info_factory,
+ const std::string& server_hostname);
+
private:
std::string server_config_id_; // An opaque id from the server.
std::string server_config_; // A serialized handshake message.
@@ -106,10 +114,14 @@ class NET_EXPORT_PRIVATE QuicCryptoClientConfig : public QuicCryptoConfig {
// scfg contains the cached, parsed value of |server_config|.
mutable scoped_ptr<CryptoHandshakeMessage> scfg_;
+ scoped_ptr<QuicServerInfo> quic_server_info_;
+
DISALLOW_COPY_AND_ASSIGN(CachedState);
};
QuicCryptoClientConfig();
+ explicit QuicCryptoClientConfig(
+ QuicServerInfoFactory* quic_server_info_factory);
~QuicCryptoClientConfig();
// Sets the members to reasonable, default values.
@@ -207,6 +219,7 @@ class NET_EXPORT_PRIVATE QuicCryptoClientConfig : public QuicCryptoConfig {
// about that server.
std::map<std::string, CachedState*> cached_states_;
+ QuicServerInfoFactory* quic_server_info_factory_;
scoped_ptr<ProofVerifier> proof_verifier_;
scoped_ptr<ChannelIDSigner> channel_id_signer_;
diff --git a/net/quic/quic_stream_factory.cc b/net/quic/quic_stream_factory.cc
index 22bb874..06e7825 100644
--- a/net/quic/quic_stream_factory.cc
+++ b/net/quic/quic_stream_factory.cc
@@ -22,6 +22,7 @@
#include "net/quic/congestion_control/tcp_receiver.h"
#include "net/quic/crypto/proof_verifier_chromium.h"
#include "net/quic/crypto/quic_random.h"
+#include "net/quic/crypto/quic_server_info.h"
#include "net/quic/port_suggester.h"
#include "net/quic/quic_client_session.h"
#include "net/quic/quic_clock.h"
@@ -273,6 +274,7 @@ QuicStreamFactory::QuicStreamFactory(
HostResolver* host_resolver,
ClientSocketFactory* client_socket_factory,
base::WeakPtr<HttpServerProperties> http_server_properties,
+ QuicServerInfoFactory* quic_server_info_factory,
QuicCryptoClientStreamFactory* quic_crypto_client_stream_factory,
QuicRandom* random_generator,
QuicClock* clock,
@@ -283,6 +285,7 @@ QuicStreamFactory::QuicStreamFactory(
host_resolver_(host_resolver),
client_socket_factory_(client_socket_factory),
http_server_properties_(http_server_properties),
+ quic_server_info_factory_(quic_server_info_factory),
quic_crypto_client_stream_factory_(quic_crypto_client_stream_factory),
random_generator_(random_generator),
clock_(clock),
@@ -603,7 +606,7 @@ QuicCryptoClientConfig* QuicStreamFactory::GetOrCreateCryptoConfig(
} else {
// TODO(rtenneti): if two quic_sessions for the same host_port_proxy_pair
// share the same crypto_config, will it cause issues?
- crypto_config = new QuicCryptoClientConfig();
+ crypto_config = new QuicCryptoClientConfig(quic_server_info_factory_);
crypto_config->SetDefaults();
all_crypto_configs_[host_port_proxy_pair] = crypto_config;
PopulateFromCanonicalConfig(host_port_proxy_pair, crypto_config);
diff --git a/net/quic/quic_stream_factory.h b/net/quic/quic_stream_factory.h
index f9e7a31..8bf2da2 100644
--- a/net/quic/quic_stream_factory.h
+++ b/net/quic/quic_stream_factory.h
@@ -33,6 +33,7 @@ class QuicClientSession;
class QuicConnectionHelper;
class QuicCryptoClientStreamFactory;
class QuicRandom;
+class QuicServerInfoFactory;
class QuicStreamFactory;
namespace test {
@@ -86,6 +87,7 @@ class NET_EXPORT_PRIVATE QuicStreamFactory
HostResolver* host_resolver,
ClientSocketFactory* client_socket_factory,
base::WeakPtr<HttpServerProperties> http_server_properties,
+ QuicServerInfoFactory* quic_server_info_factory,
QuicCryptoClientStreamFactory* quic_crypto_client_stream_factory,
QuicRandom* random_generator,
QuicClock* clock,
@@ -198,6 +200,7 @@ class NET_EXPORT_PRIVATE QuicStreamFactory
HostResolver* host_resolver_;
ClientSocketFactory* client_socket_factory_;
base::WeakPtr<HttpServerProperties> http_server_properties_;
+ QuicServerInfoFactory* quic_server_info_factory_;
QuicCryptoClientStreamFactory* quic_crypto_client_stream_factory_;
QuicRandom* random_generator_;
scoped_ptr<QuicClock> clock_;
diff --git a/net/quic/quic_stream_factory_test.cc b/net/quic/quic_stream_factory_test.cc
index 0b1ace7..b2bdf90 100644
--- a/net/quic/quic_stream_factory_test.cc
+++ b/net/quic/quic_stream_factory_test.cc
@@ -77,6 +77,7 @@ class QuicStreamFactoryTest : public ::testing::TestWithParam<QuicVersion> {
clock_(new MockClock()),
factory_(&host_resolver_, &socket_factory_,
base::WeakPtr<HttpServerProperties>(),
+ NULL, // quic_server_info_factory
&crypto_client_stream_factory_,
&random_generator_, clock_, kDefaultMaxPacketSize,
SupportedVersions(GetParam()), true),