]> git.ipfire.org Git - thirdparty/squid.git/blob - src/ssl/context_storage.h
Merge from trunk rev.13584
[thirdparty/squid.git] / src / ssl / context_storage.h
1 /*
2 * Copyright (C) 1996-2014 The Squid Software Foundation and contributors
3 *
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
7 */
8
9 #ifndef SQUID_SSL_CONTEXT_STORAGE_H
10 #define SQUID_SSL_CONTEXT_STORAGE_H
11
12 #if USE_OPENSSL
13
14 #include "base/LruMap.h"
15 #include "CacheManager.h"
16 #include "ip/Address.h"
17 #include "mgr/Action.h"
18 #include "mgr/Command.h"
19 #include "SquidTime.h"
20 #include "ssl/gadgets.h"
21
22 #include <list>
23 #include <map>
24 #if HAVE_OPENSSL_SSL_H
25 #include <openssl/ssl.h>
26 #endif
27
28 /// TODO: Replace on real size.
29 #define SSL_CTX_SIZE 1024
30
31 namespace Ssl
32 {
33
34 /** Reports cached SSL certificate stats to Cache Manager.
35 * TODO: Use "Report" functions instead friend class.
36 */
37 class CertificateStorageAction : public Mgr::Action
38 {
39 public:
40 CertificateStorageAction(const Mgr::Command::Pointer &cmd);
41 static Pointer Create(const Mgr::Command::Pointer &cmd);
42 virtual void dump (StoreEntry *sentry);
43 /**
44 * We do not support aggregation of information across workers
45 * TODO: aggregate these stats
46 */
47 virtual bool aggregatable() const { return false; }
48 };
49
50 typedef LruMap<SSL_CTX_Pointer, SSL_CTX_SIZE> LocalContextStorage;
51
52 /// Class for storing/manipulating LocalContextStorage per local listening address/port.
53 class GlobalContextStorage
54 {
55 friend class CertificateStorageAction;
56 public:
57 GlobalContextStorage();
58 ~GlobalContextStorage();
59 /// Create new SSL context storage for the local listening address/port.
60 void addLocalStorage(Ip::Address const & address, size_t size_of_store);
61 /// Return the local storage for the given listening address/port.
62 LocalContextStorage *getLocalStorage(Ip::Address const & address);
63 /// When reconfigring should be called this method.
64 void reconfigureStart();
65 private:
66 /// Called by getLocalStorage method
67 void reconfigureFinish();
68 bool reconfiguring; ///< True if system reconfiguring now.
69 /// Storage used on configure or reconfigure.
70 std::map<Ip::Address, size_t> configureStorage;
71 /// Map for storing all local ip address and their local storages.
72 std::map<Ip::Address, LocalContextStorage *> storage;
73 };
74
75 /// Global cache for store all SSL server certificates.
76 extern GlobalContextStorage TheGlobalContextStorage;
77 } //namespace Ssl
78 #endif // USE_OPENSSL
79
80 #endif // SQUID_SSL_CONTEXT_STORAGE_H