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

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: Fixed comments in patch set 7 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..82ddc642a311be85d48cc08b800d647ff5fa0b35 100644
--- a/net/quic/crypto/quic_server_info.cc
+++ b/net/quic/crypto/quic_server_info.cc
@@ -4,9 +4,17 @@
#include "net/quic/crypto/quic_server_info.h"
-#include "base/bind.h"
+#include <limits>
+
#include "base/pickle.h"
-#include "base/strings/string_piece.h"
+
+using std::string;
+
+namespace {
+
+const int kQuicCryptoConfigVersion = 1;
+
+} // namespace
namespace net {
@@ -15,14 +23,13 @@ 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)
- : hostname_(hostname),
- weak_factory_(this) {
+QuicServerInfo::QuicServerInfo(const string& hostname) : hostname_(hostname) {
}
QuicServerInfo::~QuicServerInfo() {
@@ -36,7 +43,7 @@ QuicServerInfo::State* QuicServerInfo::mutable_state() {
return &state_;
}
-bool QuicServerInfo::Parse(const std::string& data) {
+bool QuicServerInfo::Parse(const string& data) {
State* state = mutable_state();
state->Clear();
@@ -47,21 +54,79 @@ bool QuicServerInfo::Parse(const std::string& data) {
return r;
}
-bool QuicServerInfo::ParseInner(const std::string& data) {
- // TODO(rtenneti): restore QuicCryptoClientConfig::CachedState.
- // State* state = mutable_state();
+bool QuicServerInfo::ParseInner(const string& data) {
+ 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)) {
+ DVLOG(1) << "Missing version";
+ return false;
+ }
+
+ if (version != kQuicCryptoConfigVersion) {
+ DVLOG(1) << "Unsupported 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.
+ uint32 num_certs;
+ if (!p.ReadUInt32(&iter, &num_certs)) {
+ DVLOG(1) << "Malformed num_certs";
+ return false;
+ }
+
+ for (uint32 i = 0; i < num_certs; i++) {
+ string cert;
+ if (!p.ReadString(&iter, &cert)) {
+ DVLOG(1) << "Malformed cert";
+ return false;
+ }
+ state->certs.push_back(cert);
+ }
return true;
}
-std::string QuicServerInfo::Serialize() const {
+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) ||
+ state_.certs.size() > std::numeric_limits<uint32>::max() ||
+ !p.WriteUInt32(state_.certs.size())) {
+ return string();
+ }
+
+ for (size_t i = 0; i < state_.certs.size(); i++) {
+ if (!p.WriteString(state_.certs[i])) {
+ return string();
+ }
+ }
+
+ return string(reinterpret_cast<const char *>(p.data()), p.size());
}
QuicServerInfoFactory::~QuicServerInfoFactory() {}

Powered by Google App Engine
This is Rietveld 408576698