Moved ReplayCache into xmltooling
[shibboleth/cpp-xmltooling.git] / xmltooling / XMLToolingConfig.h
1 /*\r
2  *  Copyright 2001-2006 Internet2\r
3  * \r
4  * Licensed under the Apache License, Version 2.0 (the "License");\r
5  * you may not use this file except in compliance with the License.\r
6  * You may obtain a copy of the License at\r
7  *\r
8  *     http://www.apache.org/licenses/LICENSE-2.0\r
9  *\r
10  * Unless required by applicable law or agreed to in writing, software\r
11  * distributed under the License is distributed on an "AS IS" BASIS,\r
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13  * See the License for the specific language governing permissions and\r
14  * limitations under the License.\r
15  */\r
16 \r
17 /**\r
18  * @file XMLToolingConfig.h\r
19  * \r
20  * Library configuration \r
21  */\r
22 \r
23 #ifndef __xmltooling_config_h__\r
24 #define __xmltooling_config_h__\r
25 \r
26 #include <xmltooling/Lockable.h>\r
27 #include <xmltooling/PluginManager.h>\r
28 #include <xmltooling/util/ParserPool.h>\r
29 \r
30 #ifndef XMLTOOLING_NO_XMLSEC\r
31 namespace xmlsignature {\r
32     class XMLTOOL_API CredentialResolver;\r
33     class XMLTOOL_API KeyResolver;\r
34 };\r
35 #endif\r
36 \r
37 #if defined (_MSC_VER)\r
38     #pragma warning( push )\r
39     #pragma warning( disable : 4251 )\r
40 #endif\r
41 \r
42 namespace xmltooling {\r
43     \r
44     class XMLTOOL_API ReplayCache;\r
45     class XMLTOOL_API StorageService;\r
46     class XMLTOOL_API TrustEngine;\r
47     class XMLTOOL_API XSECCryptoX509CRL;\r
48 \r
49     /**\r
50      * Singleton object that manages library startup/shutdown.configuration.\r
51      * \r
52      * A locking interface is supplied as a convenience for code that wants to\r
53      * obtain a global system lock, but the actual configuration itself is not\r
54      * synchronized.\r
55      */\r
56     class XMLTOOL_API XMLToolingConfig : public Lockable\r
57     {\r
58         MAKE_NONCOPYABLE(XMLToolingConfig);\r
59     protected:\r
60         XMLToolingConfig() : m_replayCache(NULL), clock_skew_secs(180) {}\r
61         \r
62         /** Global ReplayCache instance. */\r
63         ReplayCache* m_replayCache;\r
64     public:\r
65         virtual ~XMLToolingConfig() {}\r
66 \r
67         /**\r
68          * Returns the global configuration object for the library.\r
69          * \r
70          * @return reference to the global library configuration object\r
71          */\r
72         static XMLToolingConfig& getConfig();\r
73         \r
74         /**\r
75          * Initializes library\r
76          * \r
77          * Each process using the library MUST call this function exactly once\r
78          * before using any library classes except for the LogConfig method.\r
79          * \r
80          * @return true iff initialization was successful \r
81          */\r
82         virtual bool init()=0;\r
83         \r
84         /**\r
85          * Shuts down library\r
86          * \r
87          * Each process using the library SHOULD call this function exactly once\r
88          * before terminating itself\r
89          */\r
90         virtual void term()=0;\r
91 \r
92         /**\r
93          * Loads a shared/dynamic library extension.\r
94          * \r
95          * Extension libraries are managed using a pair of "C" linkage functions:<br>\r
96          *      extern "C" int xmltooling_extension_init(void* context);<br>\r
97          *      extern "C" void xmltooling_extension_term();\r
98          * \r
99          * This method is internally synchronized.\r
100          * \r
101          * @param path      pathname of shared library to load into process\r
102          * @param context   arbitrary data to pass to library initialization hook\r
103          * @return true iff library was loaded successfully\r
104          */\r
105         virtual bool load_library(const char* path, void* context=NULL)=0;\r
106         \r
107         /**\r
108          * Configure logging system.\r
109          * \r
110          * May be called first, before initializing the library. Other calls to it\r
111          * must be externally synchronized. \r
112          * \r
113          * @param config    either a logging configuration file, or a level from the set\r
114          *                  (DEBUG, INFO, NOTICE, WARN, ERROR, CRIT, ALERT, FATAL, EMERG)\r
115          * @return true iff configuration was successful\r
116          */\r
117         virtual bool log_config(const char* config=NULL)=0;\r
118 \r
119         /**\r
120          * Obtains a non-validating parser pool.\r
121          * Library must be initialized first.\r
122          *\r
123          * @return reference to a non-validating parser pool.\r
124          */\r
125         virtual ParserPool& getParser() const=0;\r
126 \r
127         /**\r
128          * Obtains a validating parser pool.\r
129          * Library must be initialized first. Schema/catalog registration must be\r
130          * externally synchronized.\r
131          *\r
132          * @return reference to a validating parser pool.\r
133          */\r
134         virtual ParserPool& getValidatingParser() const=0;\r
135 \r
136         /**\r
137          * Sets the global ReplayCache instance.\r
138          * This method must be externally synchronized with any code that uses the object.\r
139          * Any previously set object is destroyed.\r
140          * \r
141          * @param replayCache   new ReplayCache instance to store\r
142          */\r
143         void setReplayCache(ReplayCache* replayCache);\r
144 \r
145         /**\r
146          * Returns the global ReplayCache instance.\r
147          * \r
148          * @return  global ReplayCache or NULL\r
149          */\r
150         ReplayCache* getReplayCache() const {\r
151             return m_replayCache;\r
152         }\r
153                 \r
154         /**\r
155          * List of catalog files to load into validating parser pool at initialization time.\r
156          * Like other path settings, the separator depends on the platform\r
157          * (semicolon on Windows, colon otherwise). \r
158          */\r
159         std::string catalog_path;\r
160         \r
161         /**\r
162          * Adjusts any clock comparisons to be more liberal/permissive by the\r
163          * indicated number of seconds.\r
164          */\r
165         unsigned int clock_skew_secs;\r
166 \r
167 #ifndef XMLTOOLING_NO_XMLSEC\r
168         /**\r
169          * Returns an X.509 CRL implementation object.\r
170          */\r
171         virtual XSECCryptoX509CRL* X509CRL() const=0;\r
172 \r
173         /**\r
174          * Manages factories for KeyResolver plugins.\r
175          */\r
176         PluginManager<xmlsignature::KeyResolver,const DOMElement*> KeyResolverManager;\r
177 \r
178         /**\r
179          * Manages factories for CredentialResolver plugins.\r
180          */\r
181         PluginManager<xmlsignature::CredentialResolver,const DOMElement*> CredentialResolverManager;\r
182 \r
183         /**\r
184          * Manages factories for TrustEngine plugins.\r
185          */\r
186         PluginManager<TrustEngine,const DOMElement*> TrustEngineManager;\r
187 #endif\r
188 \r
189         /**\r
190          * Manages factories for StorageService plugins.\r
191          */\r
192         PluginManager<StorageService,const DOMElement*> StorageServiceManager;\r
193     };\r
194 \r
195 };\r
196 \r
197 #if defined (_MSC_VER)\r
198     #pragma warning( pop )\r
199 #endif\r
200 \r
201 #endif /* __xmltooling_config_h__ */\r