Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/quic/crypto/quic_server_info.h" | 5 #include "net/quic/crypto/quic_server_info.h" |
| 6 | 6 |
| 7 #include <limits> | 7 #include <limits> |
| 8 | 8 |
| 9 #include "base/pickle.h" | 9 #include "base/pickle.h" |
| 10 | 10 |
| 11 using std::string; | 11 using std::string; |
| 12 | 12 |
| 13 namespace { | 13 namespace { |
| 14 | 14 |
| 15 const int kQuicCryptoConfigVersion = 1; | 15 const int kQuicCryptoConfigVersion = 2; |
| 16 | 16 |
| 17 } // namespace | 17 } // namespace |
| 18 | 18 |
| 19 namespace net { | 19 namespace net { |
| 20 | 20 |
| 21 QuicServerInfo::State::State() {} | 21 QuicServerInfo::State::State() {} |
| 22 | 22 |
| 23 QuicServerInfo::State::~State() {} | 23 QuicServerInfo::State::~State() {} |
| 24 | 24 |
| 25 void QuicServerInfo::State::Clear() { | 25 void QuicServerInfo::State::Clear() { |
| 26 server_config.clear(); | 26 server_config.clear(); |
| 27 source_address_token.clear(); | 27 source_address_token.clear(); |
| 28 cert_sct.clear(); | |
| 29 chlo_hash.clear(); | |
| 28 server_config_sig.clear(); | 30 server_config_sig.clear(); |
| 29 certs.clear(); | 31 certs.clear(); |
| 30 } | 32 } |
| 31 | 33 |
| 32 QuicServerInfo::QuicServerInfo(const QuicServerId& server_id) | 34 QuicServerInfo::QuicServerInfo(const QuicServerId& server_id) |
| 33 : server_id_(server_id) {} | 35 : server_id_(server_id) {} |
| 34 | 36 |
| 35 QuicServerInfo::~QuicServerInfo() {} | 37 QuicServerInfo::~QuicServerInfo() {} |
| 36 | 38 |
| 37 const QuicServerInfo::State& QuicServerInfo::state() const { | 39 const QuicServerInfo::State& QuicServerInfo::state() const { |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 76 } | 78 } |
| 77 | 79 |
| 78 if (!iter.ReadString(&state->server_config)) { | 80 if (!iter.ReadString(&state->server_config)) { |
| 79 DVLOG(1) << "Malformed server_config"; | 81 DVLOG(1) << "Malformed server_config"; |
| 80 return false; | 82 return false; |
| 81 } | 83 } |
| 82 if (!iter.ReadString(&state->source_address_token)) { | 84 if (!iter.ReadString(&state->source_address_token)) { |
| 83 DVLOG(1) << "Malformed source_address_token"; | 85 DVLOG(1) << "Malformed source_address_token"; |
| 84 return false; | 86 return false; |
| 85 } | 87 } |
| 88 if (!iter.ReadString(&state->cert_sct)) { | |
|
ramant (doing other things)
2016/03/23 01:56:02
Hi Ryan,
Should we load older versions and initi
Ryan Hamilton
2016/03/23 13:55:44
That sounds fine, since that's what we're doing to
ramant (doing other things)
2016/03/23 22:43:42
Done.
| |
| 89 DVLOG(1) << "Malformed cert_sct"; | |
| 90 return false; | |
| 91 } | |
| 92 if (!iter.ReadString(&state->chlo_hash)) { | |
| 93 DVLOG(1) << "Malformed chlo_hash"; | |
| 94 return false; | |
| 95 } | |
| 86 if (!iter.ReadString(&state->server_config_sig)) { | 96 if (!iter.ReadString(&state->server_config_sig)) { |
| 87 DVLOG(1) << "Malformed server_config_sig"; | 97 DVLOG(1) << "Malformed server_config_sig"; |
| 88 return false; | 98 return false; |
| 89 } | 99 } |
| 90 | 100 |
| 91 // Read certs. | 101 // Read certs. |
| 92 uint32_t num_certs; | 102 uint32_t num_certs; |
| 93 if (!iter.ReadUInt32(&num_certs)) { | 103 if (!iter.ReadUInt32(&num_certs)) { |
| 94 DVLOG(1) << "Malformed num_certs"; | 104 DVLOG(1) << "Malformed num_certs"; |
| 95 return false; | 105 return false; |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 112 state_.Clear(); | 122 state_.Clear(); |
| 113 return pickled_data; | 123 return pickled_data; |
| 114 } | 124 } |
| 115 | 125 |
| 116 string QuicServerInfo::SerializeInner() const { | 126 string QuicServerInfo::SerializeInner() const { |
| 117 base::Pickle p(sizeof(base::Pickle::Header)); | 127 base::Pickle p(sizeof(base::Pickle::Header)); |
| 118 | 128 |
| 119 if (!p.WriteInt(kQuicCryptoConfigVersion) || | 129 if (!p.WriteInt(kQuicCryptoConfigVersion) || |
| 120 !p.WriteString(state_.server_config) || | 130 !p.WriteString(state_.server_config) || |
| 121 !p.WriteString(state_.source_address_token) || | 131 !p.WriteString(state_.source_address_token) || |
| 132 !p.WriteString(state_.cert_sct) || !p.WriteString(state_.chlo_hash) || | |
| 122 !p.WriteString(state_.server_config_sig) || | 133 !p.WriteString(state_.server_config_sig) || |
| 123 state_.certs.size() > std::numeric_limits<uint32_t>::max() || | 134 state_.certs.size() > std::numeric_limits<uint32_t>::max() || |
| 124 !p.WriteUInt32(state_.certs.size())) { | 135 !p.WriteUInt32(state_.certs.size())) { |
| 125 return string(); | 136 return string(); |
| 126 } | 137 } |
| 127 | 138 |
| 128 for (size_t i = 0; i < state_.certs.size(); i++) { | 139 for (size_t i = 0; i < state_.certs.size(); i++) { |
| 129 if (!p.WriteString(state_.certs[i])) { | 140 if (!p.WriteString(state_.certs[i])) { |
| 130 return string(); | 141 return string(); |
| 131 } | 142 } |
| 132 } | 143 } |
| 133 | 144 |
| 134 return string(reinterpret_cast<const char*>(p.data()), p.size()); | 145 return string(reinterpret_cast<const char*>(p.data()), p.size()); |
| 135 } | 146 } |
| 136 | 147 |
| 137 QuicServerInfoFactory::~QuicServerInfoFactory() {} | 148 QuicServerInfoFactory::~QuicServerInfoFactory() {} |
| 138 | 149 |
| 139 } // namespace net | 150 } // namespace net |
| OLD | NEW |