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

Side by Side Diff: net/socket/ssl_client_socket_openssl.h

Issue 994263002: Rewrite session cache in OpenSSL ports. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: reebase Created 5 years, 8 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 unified diff | Download patch
« no previous file with comments | « net/net_common.gypi ('k') | net/socket/ssl_client_socket_openssl.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 #ifndef NET_SOCKET_SSL_CLIENT_SOCKET_OPENSSL_H_ 5 #ifndef NET_SOCKET_SSL_CLIENT_SOCKET_OPENSSL_H_
6 #define NET_SOCKET_SSL_CLIENT_SOCKET_OPENSSL_H_ 6 #define NET_SOCKET_SSL_CLIENT_SOCKET_OPENSSL_H_
7 7
8 #include <string> 8 #include <string>
9 9
10 #include "base/compiler_specific.h" 10 #include "base/compiler_specific.h"
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 const char *argp, int argi, long argl, 159 const char *argp, int argi, long argl,
160 long retvalue); 160 long retvalue);
161 161
162 // Callback from the SSL layer when an operation is performed on 162 // Callback from the SSL layer when an operation is performed on
163 // |transport_bio_|'s peer. 163 // |transport_bio_|'s peer.
164 static long BIOCallback(BIO *bio, 164 static long BIOCallback(BIO *bio,
165 int cmd, 165 int cmd,
166 const char *argp, int argi, long argl, 166 const char *argp, int argi, long argl,
167 long retvalue); 167 long retvalue);
168 168
169 // Called after the initial handshake completes and after the server
170 // certificate has been verified. The order of handshake completion and
171 // certificate verification depends on whether the connection was false
172 // started. After both have happened (thus calling this twice), the session is
173 // safe to cache and will be cached.
174 void MaybeCacheSession();
175
176 // Callback from the SSL layer when the internal state machine progresses. It
177 // is used to listen for when the handshake completes entirely; |Connect| may
178 // return early if false starting.
179 void InfoCallback(int type, int val);
180
169 // Adds the SignedCertificateTimestamps from ct_verify_result_ to |ssl_info|. 181 // Adds the SignedCertificateTimestamps from ct_verify_result_ to |ssl_info|.
170 // SCTs are held in three separate vectors in ct_verify_result, each 182 // SCTs are held in three separate vectors in ct_verify_result, each
171 // vetor representing a particular verification state, this method associates 183 // vetor representing a particular verification state, this method associates
172 // each of the SCTs with the corresponding SCTVerifyStatus as it adds it to 184 // each of the SCTs with the corresponding SCTVerifyStatus as it adds it to
173 // the |ssl_info|.signed_certificate_timestamps list. 185 // the |ssl_info|.signed_certificate_timestamps list.
174 void AddSCTInfoToSSLInfo(SSLInfo* ssl_info) const; 186 void AddSCTInfoToSSLInfo(SSLInfo* ssl_info) const;
175 187
176 // Returns a unique key string for the SSL session cache for 188 // Returns a unique key string for the SSL session cache for
177 // this socket. 189 // this socket.
178 std::string GetSessionCacheKey() const; 190 std::string GetSessionCacheKey() const;
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
257 BIO* transport_bio_; 269 BIO* transport_bio_;
258 270
259 scoped_ptr<ClientSocketHandle> transport_; 271 scoped_ptr<ClientSocketHandle> transport_;
260 const HostPortPair host_and_port_; 272 const HostPortPair host_and_port_;
261 SSLConfig ssl_config_; 273 SSLConfig ssl_config_;
262 // ssl_session_cache_shard_ is an opaque string that partitions the SSL 274 // ssl_session_cache_shard_ is an opaque string that partitions the SSL
263 // session cache. i.e. sessions created with one value will not attempt to 275 // session cache. i.e. sessions created with one value will not attempt to
264 // resume on the socket with a different value. 276 // resume on the socket with a different value.
265 const std::string ssl_session_cache_shard_; 277 const std::string ssl_session_cache_shard_;
266 278
267 // Used for session cache diagnostics.
268 bool trying_cached_session_;
269
270 enum State { 279 enum State {
271 STATE_NONE, 280 STATE_NONE,
272 STATE_HANDSHAKE, 281 STATE_HANDSHAKE,
273 STATE_CHANNEL_ID_LOOKUP, 282 STATE_CHANNEL_ID_LOOKUP,
274 STATE_CHANNEL_ID_LOOKUP_COMPLETE, 283 STATE_CHANNEL_ID_LOOKUP_COMPLETE,
275 STATE_VERIFY_CERT, 284 STATE_VERIFY_CERT,
276 STATE_VERIFY_CERT_COMPLETE, 285 STATE_VERIFY_CERT_COMPLETE,
277 }; 286 };
278 State next_handshake_state_; 287 State next_handshake_state_;
279 NextProtoStatus npn_status_; 288 NextProtoStatus npn_status_;
280 std::string npn_proto_; 289 std::string npn_proto_;
281 // Written by the |channel_id_service_|. 290 // Written by the |channel_id_service_|.
282 std::string channel_id_private_key_; 291 std::string channel_id_private_key_;
283 std::string channel_id_cert_; 292 std::string channel_id_cert_;
284 // True if channel ID extension was negotiated. 293 // True if channel ID extension was negotiated.
285 bool channel_id_xtn_negotiated_; 294 bool channel_id_xtn_negotiated_;
295 // True if the initial handshake has completed.
296 bool handshake_completed_;
297 // True if the initial handshake's certificate has been verified.
298 bool certificate_verified_;
286 // The request handle for |channel_id_service_|. 299 // The request handle for |channel_id_service_|.
287 ChannelIDService::RequestHandle channel_id_request_handle_; 300 ChannelIDService::RequestHandle channel_id_request_handle_;
288 301
289 TransportSecurityState* transport_security_state_; 302 TransportSecurityState* transport_security_state_;
290 303
291 CertPolicyEnforcer* const policy_enforcer_; 304 CertPolicyEnforcer* const policy_enforcer_;
292 305
293 // pinning_failure_log contains a message produced by 306 // pinning_failure_log contains a message produced by
294 // TransportSecurityState::CheckPublicKeyPins in the event of a 307 // TransportSecurityState::CheckPublicKeyPins in the event of a
295 // pinning failure. It is a (somewhat) human-readable string. 308 // pinning failure. It is a (somewhat) human-readable string.
296 std::string pinning_failure_log_; 309 std::string pinning_failure_log_;
297 310
298 BoundNetLog net_log_; 311 BoundNetLog net_log_;
299 base::WeakPtrFactory<SSLClientSocketOpenSSL> weak_factory_; 312 base::WeakPtrFactory<SSLClientSocketOpenSSL> weak_factory_;
300 }; 313 };
301 314
302 } // namespace net 315 } // namespace net
303 316
304 #endif // NET_SOCKET_SSL_CLIENT_SOCKET_OPENSSL_H_ 317 #endif // NET_SOCKET_SSL_CLIENT_SOCKET_OPENSSL_H_
OLDNEW
« no previous file with comments | « net/net_common.gypi ('k') | net/socket/ssl_client_socket_openssl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698