Index: net/quic/quic_crypto_client_stream.cc |
diff --git a/net/quic/quic_crypto_client_stream.cc b/net/quic/quic_crypto_client_stream.cc |
index 9e48e4f5611ac7ce14b654351298cc077531bd4f..bd06a02eeb06b1848fa7649b1836559d4be4ff5b 100644 |
--- a/net/quic/quic_crypto_client_stream.cc |
+++ b/net/quic/quic_crypto_client_stream.cc |
@@ -13,6 +13,7 @@ |
#include "net/quic/crypto/proof_verifier.h" |
#include "net/quic/crypto/proof_verifier_chromium.h" |
#include "net/quic/crypto/quic_server_info.h" |
+#include "net/quic/crypto/quic_server_info.h" |
ramant (doing other things)
2014/03/12 00:50:56
nit: line 16 could be deleted.
Ryan Hamilton
2014/03/12 04:00:45
Done.
|
#include "net/quic/quic_protocol.h" |
#include "net/quic/quic_session.h" |
#include "net/ssl/ssl_connection_status_flags.h" |
@@ -65,7 +66,6 @@ void QuicCryptoClientStream::ProofVerifierCallbackImpl::Cancel() { |
stream_ = NULL; |
} |
- |
QuicCryptoClientStream::QuicCryptoClientStream( |
const string& server_hostname, |
QuicSession* session, |
@@ -415,11 +415,15 @@ void QuicCryptoClientStream::OnIOComplete(int result) { |
DoHandshakeLoop(NULL); |
} |
+void QuicCryptoClientStream::SetQuicServerInfo( |
+ scoped_ptr<QuicServerInfo> server_info) { |
+ quic_server_info_.reset(server_info.release()); |
+} |
+ |
int QuicCryptoClientStream::DoLoadQuicServerInfo( |
QuicCryptoClientConfig::CachedState* cached) { |
next_state_ = STATE_SEND_CHLO; |
- QuicServerInfo* quic_server_info = cached->quic_server_info(); |
- if (!quic_server_info) { |
+ if (!quic_server_info_) { |
return OK; |
} |
@@ -437,7 +441,7 @@ int QuicCryptoClientStream::DoLoadQuicServerInfo( |
// quic_server_info->Persist requires quic_server_info to be ready, so we |
// always call WaitForDataReady, even though we might have initialized |
// |cached| config from the cached state for a canonical hostname. |
- int rv = quic_server_info->WaitForDataReady( |
+ int rv = quic_server_info_->WaitForDataReady( |
base::Bind(&QuicCryptoClientStream::OnIOComplete, |
weak_factory_.GetWeakPtr())); |
@@ -450,7 +454,7 @@ int QuicCryptoClientStream::DoLoadQuicServerInfo( |
void QuicCryptoClientStream::DoLoadQuicServerInfoComplete( |
QuicCryptoClientConfig::CachedState* cached) { |
LoadQuicServerInfo(cached); |
- QuicServerInfo::State* state = cached->quic_server_info()->mutable_state(); |
+ QuicServerInfo::State* state = quic_server_info_->mutable_state(); |
state->Clear(); |
} |
@@ -468,8 +472,12 @@ void QuicCryptoClientStream::LoadQuicServerInfo( |
UMA_HISTOGRAM_TIMES("Net.QuicServerInfo.DiskCacheReadTime", |
base::TimeTicks::Now() - read_start_time_); |
- if (disk_cache_load_result_ != OK || !cached->LoadQuicServerInfo( |
- session()->connection()->clock()->WallNow())) { |
+ if (disk_cache_load_result_ != OK || |
+ !cached->Initialize(quic_server_info_->state().server_config, |
+ quic_server_info_->state().server_config_sig, |
+ quic_server_info_->state().source_address_token, |
+ quic_server_info_->state().certs, |
+ session()->connection()->clock()->WallNow())) { |
// It is ok to proceed to STATE_SEND_CHLO when we cannot load QuicServerInfo |
// from the disk cache. |
DCHECK(cached->IsEmpty()); |
@@ -486,4 +494,24 @@ void QuicCryptoClientStream::LoadQuicServerInfo( |
} |
} |
+void QuicCryptoClientStream::SaveQuicServerInfo( |
+ QuicCryptoClientConfig::CachedState* cached) { |
+ DCHECK(cached->proof_valid()); |
+ |
+ // If the QuicServerInfo hasn't managed to load from disk yet then we can't |
+ // save anything. TODO(rtenneti): we should fix this. |
+ if (!quic_server_info_->IsDataReady()) { |
+ return; |
+ } |
+ |
+ QuicServerInfo::State* state = quic_server_info_->mutable_state(); |
+ |
+ state->server_config = cached->server_config(); |
+ state->source_address_token = cached->source_address_token(); |
+ state->server_config_sig = cached->signature(); |
+ state->certs = cached->certs(); |
+ |
+ quic_server_info_->Persist(); |
+} |
+ |
} // namespace net |