OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/socket/ssl_session_cache_openssl.h" | 5 #include "net/socket/ssl_session_cache_openssl.h" |
6 | 6 |
7 #include <list> | 7 #include <list> |
8 #include <map> | 8 #include <map> |
9 | 9 |
10 #include <openssl/rand.h> | 10 #include <openssl/rand.h> |
11 #include <openssl/ssl.h> | 11 #include <openssl/ssl.h> |
12 | 12 |
13 #include "base/containers/hash_tables.h" | 13 #include "base/containers/hash_tables.h" |
14 #include "base/lazy_instance.h" | 14 #include "base/lazy_instance.h" |
15 #include "base/logging.h" | 15 #include "base/logging.h" |
16 #include "base/synchronization/lock.h" | 16 #include "base/synchronization/lock.h" |
17 | 17 |
18 namespace net { | 18 namespace net { |
19 | 19 |
20 namespace { | 20 namespace { |
21 | 21 |
22 // A helper class to lazily create a new EX_DATA index to map SSL_CTX handles | 22 // A helper class to lazily create a new EX_DATA index to map SSL_CTX handles |
23 // to their corresponding SSLSessionCacheOpenSSLImpl object. | 23 // to their corresponding SSLSessionCacheOpenSSLImpl object. |
24 class SSLContextExIndex { | 24 class SSLContextExIndex { |
25 public: | 25 public: |
26 SSLContextExIndex() { | 26 SSLContextExIndex() { |
27 context_index_ = SSL_CTX_get_ex_new_index(0, NULL, NULL, NULL, NULL); | 27 context_index_ = SSL_CTX_get_ex_new_index(0, NULL, NULL, NULL, NULL); |
28 DCHECK_NE(-1, context_index_); | 28 DCHECK_NE(-1, context_index_); |
29 session_index_ = SSL_SESSION_get_ex_new_index(0, NULL, NULL, NULL, NULL); | 29 session_index_ = SSL_SESSION_get_ex_new_index(0, NULL, NULL, NULL, NULL); |
30 DCHECK_NE(-1, session_index_); | 30 DCHECK_NE(-1, session_index_); |
31 } | 31 } |
32 | 32 |
33 int context_index() const { return context_index_; } | 33 int context_index() const { return context_index_; } |
34 int session_index() const { return session_index_; } | 34 int session_index() const { return session_index_; } |
35 | 35 |
(...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
471 // or SSL_CTX_set_ex_data(). | 471 // or SSL_CTX_set_ex_data(). |
472 base::Lock lock_; // Protects access to containers below. | 472 base::Lock lock_; // Protects access to containers below. |
473 | 473 |
474 MRUSessionList ordering_; | 474 MRUSessionList ordering_; |
475 KeyIndex key_index_; | 475 KeyIndex key_index_; |
476 SessionIdIndex id_index_; | 476 SessionIdIndex id_index_; |
477 | 477 |
478 size_t expiration_check_; | 478 size_t expiration_check_; |
479 }; | 479 }; |
480 | 480 |
481 SSLSessionCacheOpenSSL::~SSLSessionCacheOpenSSL() { delete impl_; } | 481 SSLSessionCacheOpenSSL::~SSLSessionCacheOpenSSL() { |
| 482 delete impl_; |
| 483 } |
482 | 484 |
483 size_t SSLSessionCacheOpenSSL::size() const { return impl_->size(); } | 485 size_t SSLSessionCacheOpenSSL::size() const { |
| 486 return impl_->size(); |
| 487 } |
484 | 488 |
485 void SSLSessionCacheOpenSSL::Reset(SSL_CTX* ctx, const Config& config) { | 489 void SSLSessionCacheOpenSSL::Reset(SSL_CTX* ctx, const Config& config) { |
486 if (impl_) | 490 if (impl_) |
487 delete impl_; | 491 delete impl_; |
488 | 492 |
489 impl_ = new SSLSessionCacheOpenSSLImpl(ctx, config); | 493 impl_ = new SSLSessionCacheOpenSSLImpl(ctx, config); |
490 } | 494 } |
491 | 495 |
492 bool SSLSessionCacheOpenSSL::SetSSLSession(SSL* ssl) { | 496 bool SSLSessionCacheOpenSSL::SetSSLSession(SSL* ssl) { |
493 return impl_->SetSSLSession(ssl); | 497 return impl_->SetSSLSession(ssl); |
494 } | 498 } |
495 | 499 |
496 bool SSLSessionCacheOpenSSL::SetSSLSessionWithKey( | 500 bool SSLSessionCacheOpenSSL::SetSSLSessionWithKey( |
497 SSL* ssl, | 501 SSL* ssl, |
498 const std::string& cache_key) { | 502 const std::string& cache_key) { |
499 return impl_->SetSSLSessionWithKey(ssl, cache_key); | 503 return impl_->SetSSLSessionWithKey(ssl, cache_key); |
500 } | 504 } |
501 | 505 |
502 void SSLSessionCacheOpenSSL::MarkSSLSessionAsGood(SSL* ssl) { | 506 void SSLSessionCacheOpenSSL::MarkSSLSessionAsGood(SSL* ssl) { |
503 return impl_->MarkSSLSessionAsGood(ssl); | 507 return impl_->MarkSSLSessionAsGood(ssl); |
504 } | 508 } |
505 | 509 |
506 void SSLSessionCacheOpenSSL::Flush() { impl_->Flush(); } | 510 void SSLSessionCacheOpenSSL::Flush() { |
| 511 impl_->Flush(); |
| 512 } |
507 | 513 |
508 } // namespace net | 514 } // namespace net |
OLD | NEW |