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

Unified Diff: net/quic/crypto/quic_server_info.cc

Issue 154933003: Persist server's crypto config data to disk cache for 0-RTT (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Update with TOT and handle multiple tabs loading same URL Created 6 years, 10 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/crypto/quic_server_info.cc
diff --git a/net/quic/crypto/quic_server_info.cc b/net/quic/crypto/quic_server_info.cc
index 25cb9192b7ec423f67d6d7a5378ecf17c979826b..fe76df0e5e8e9861a2e614e181e8fee5bc431de1 100644
--- a/net/quic/crypto/quic_server_info.cc
+++ b/net/quic/crypto/quic_server_info.cc
@@ -6,7 +6,12 @@
#include "base/bind.h"
wtc 2014/02/07 00:54:11 I think this header can be removed.
ramant (doing other things) 2014/02/07 20:30:51 Done.
#include "base/pickle.h"
-#include "base/strings/string_piece.h"
+
+using std::string;
wtc 2014/02/07 00:54:11 I think we should remove this "using std::string"
ramant (doing other things) 2014/02/07 20:30:51 Done.
+
+namespace {
+const size_t kQuicCryptoConfigVersion = 1;
+} // namespace
wtc 2014/02/07 00:54:11 1. Nit: kQuicCryptoConfigVersion can be of a small
ramant (doing other things) 2014/02/07 20:30:51 Done.
namespace net {
@@ -15,13 +20,15 @@ QuicServerInfo::State::State() {}
QuicServerInfo::State::~State() {}
void QuicServerInfo::State::Clear() {
- data.clear();
+ server_config_.clear();
+ source_address_token_.clear();
+ server_config_sig_.clear();
+ certs_.clear();
}
-// TODO(rtenneti): Flesh out the details.
-QuicServerInfo::QuicServerInfo(
- const std::string& hostname)
+QuicServerInfo::QuicServerInfo(const std::string& hostname)
: hostname_(hostname),
+ data_loaded_(false),
weak_factory_(this) {
}
@@ -40,6 +47,7 @@ bool QuicServerInfo::Parse(const std::string& data) {
State* state = mutable_state();
state->Clear();
+ data_loaded_ = false;
wtc 2014/02/07 00:54:11 I recommend moving this to the beginning of ParseI
ramant (doing other things) 2014/02/07 20:30:51 Done.
bool r = ParseInner(data);
if (!r)
@@ -48,11 +56,51 @@ bool QuicServerInfo::Parse(const std::string& data) {
}
bool QuicServerInfo::ParseInner(const std::string& data) {
- // TODO(rtenneti): restore QuicCryptoClientConfig::CachedState.
- // State* state = mutable_state();
+ State* state = mutable_state();
- // Pickle p(data.data(), data.size());
- // PickleIterator iter(p);
+ // No data was read from the disk cache.
+ if (data.empty()) {
+ return false;
+ }
+
+ Pickle p(data.data(), data.size());
+ PickleIterator iter(p);
+
+ int version = -1;
+ if (!p.ReadInt(&iter, &version) || version < 0) {
wtc 2014/02/07 00:54:11 You should check version != kQuicCryptoConfigVersi
ramant (doing other things) 2014/02/07 20:30:51 Done.
+ DVLOG(1) << "Missing version";
+ return false;
+ }
+
+ if (!p.ReadString(&iter, &state->server_config_)) {
+ DVLOG(1) << "Malformed server_config";
+ return false;
+ }
+ if (!p.ReadString(&iter, &state->source_address_token_)) {
+ DVLOG(1) << "Malformed source_address_token";
+ return false;
+ }
+ if (!p.ReadString(&iter, &state->server_config_sig_)) {
+ DVLOG(1) << "Malformed server_config_sig";
+ return false;
+ }
+
+ // Read certs.
+ int num_certs;
+ if (!p.ReadInt(&iter, &num_certs) || num_certs < 0) {
+ DVLOG(1) << "Malformed num_certs";
+ return false;
+ }
+
+ for (int i = 0; i < num_certs; i++) {
+ string cert;
+ if (!p.ReadString(&iter, &cert)) {
+ DVLOG(1) << "Malformed cert";
+ return false;
+ }
+ state->certs_.push_back(cert);
+ }
+ data_loaded_ = true;
return true;
}
@@ -60,8 +108,21 @@ bool QuicServerInfo::ParseInner(const std::string& data) {
std::string QuicServerInfo::Serialize() const {
Pickle p(sizeof(Pickle::Header));
- // TODO(rtenneti): serialize QuicCryptoClientConfig::CachedState.
- return std::string(reinterpret_cast<const char *>(p.data()), p.size());
+ if (!p.WriteInt(kQuicCryptoConfigVersion) ||
+ !p.WriteString(state_.server_config_) ||
+ !p.WriteString(state_.source_address_token_) ||
+ !p.WriteString(state_.server_config_sig_) ||
+ !p.WriteInt(state_.certs_.size())) {
wtc 2014/02/07 00:54:11 This probably should be p.WriteUInt32 since state_
ramant (doing other things) 2014/02/07 20:30:51 Done.
ramant (doing other things) 2014/02/07 20:30:51 Done.
+ return "";
wtc 2014/02/07 00:54:11 Nit: it may be better to return std::string().
+ }
+
+ for (size_t i = 0; i < state_.certs_.size(); i++) {
+ if (!p.WriteString(state_.certs_[i])) {
+ return "";
+ }
+ }
+
+ return string(reinterpret_cast<const char *>(p.data()), p.size());
}
QuicServerInfoFactory::~QuicServerInfoFactory() {}

Powered by Google App Engine
This is Rietveld 408576698