2 * Copyright (C) 1996-2014 The Squid Software Foundation and contributors
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.
9 #ifndef SQUID_SSL_CONTEXT_STORAGE_H
10 #define SQUID_SSL_CONTEXT_STORAGE_H
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"
24 #if HAVE_OPENSSL_SSL_H
25 #include <openssl/ssl.h>
28 /// TODO: Replace on real size.
29 #define SSL_CTX_SIZE 1024
34 /** Reports cached SSL certificate stats to Cache Manager.
35 * TODO: Use "Report" functions instead friend class.
37 class CertificateStorageAction
: public Mgr::Action
40 CertificateStorageAction(const Mgr::Command::Pointer
&cmd
);
41 static Pointer
Create(const Mgr::Command::Pointer
&cmd
);
42 virtual void dump (StoreEntry
*sentry
);
44 * We do not support aggregation of information across workers
45 * TODO: aggregate these stats
47 virtual bool aggregatable() const { return false; }
50 typedef LruMap
<SSL_CTX_Pointer
, SSL_CTX_SIZE
> LocalContextStorage
;
52 /// Class for storing/manipulating LocalContextStorage per local listening address/port.
53 class GlobalContextStorage
55 friend class CertificateStorageAction
;
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();
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
;
75 /// Global cache for store all SSL server certificates.
76 extern GlobalContextStorage TheGlobalContextStorage
;
80 #endif // SQUID_SSL_CONTEXT_STORAGE_H