daemon: Flush shunts before unloading plugins
[strongswan.git] / src / libstrongswan / library.h
1 /*
2 * Copyright (C) 2010-2014 Tobias Brunner
3 * Copyright (C) 2008 Martin Willi
4 * Hochschule fuer Technik Rapperswil
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation; either version 2 of the License, or (at your
9 * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
10 *
11 * This program is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * for more details.
15 */
16
17 /**
18 * @defgroup libstrongswan libstrongswan
19 *
20 * @defgroup asn1 asn1
21 * @ingroup libstrongswan
22 *
23 * @defgroup bio bio
24 * @ingroup libstrongswan
25 *
26 * @defgroup collections collections
27 * @ingroup libstrongswan
28 *
29 * @defgroup credentials credentials
30 * @ingroup libstrongswan
31 *
32 * @defgroup keys keys
33 * @ingroup credentials
34 *
35 * @defgroup certificates certificates
36 * @ingroup credentials
37 *
38 * @defgroup containers containers
39 * @ingroup credentials
40 *
41 * @defgroup sets sets
42 * @ingroup credentials
43 *
44 * @defgroup crypto crypto
45 * @ingroup libstrongswan
46 *
47 * @defgroup database database
48 * @ingroup libstrongswan
49 *
50 * @defgroup fetcher fetcher
51 * @ingroup libstrongswan
52 *
53 * @defgroup resolver resolver
54 * @ingroup libstrongswan
55 *
56 * @defgroup ipsec ipsec
57 * @ingroup libstrongswan
58 *
59 * @defgroup networking networking
60 * @ingroup libstrongswan
61 *
62 * @defgroup streams streams
63 * @ingroup networking
64 *
65 * @defgroup plugins plugins
66 * @ingroup libstrongswan
67 *
68 * @defgroup processing processing
69 * @ingroup libstrongswan
70 *
71 * @defgroup jobs jobs
72 * @ingroup processing
73 *
74 * @defgroup selectors selectors
75 * @ingroup libstrongswan
76 *
77 * @defgroup threading threading
78 * @ingroup libstrongswan
79 *
80 * @defgroup utils utils
81 * @ingroup libstrongswan
82 *
83 * @defgroup compat compat
84 * @ingroup utils
85 */
86
87 /**
88 * @defgroup library library
89 * @{ @ingroup libstrongswan
90 */
91
92 #ifndef LIBRARY_H_
93 #define LIBRARY_H_
94
95 #ifndef CONFIG_H_INCLUDED
96 # error config.h not included, pass "-include [...]/config.h" to gcc
97 #endif
98
99 /* make sure we include printf_hook.h and utils.h first */
100 #include "utils/printf_hook/printf_hook.h"
101 #include "utils/utils.h"
102 #include "networking/host_resolver.h"
103 #include "networking/streams/stream_manager.h"
104 #include "processing/processor.h"
105 #include "processing/scheduler.h"
106 #include "processing/watcher.h"
107 #include "crypto/crypto_factory.h"
108 #include "crypto/proposal/proposal_keywords.h"
109 #include "fetcher/fetcher_manager.h"
110 #include "resolver/resolver_manager.h"
111 #include "database/database_factory.h"
112 #include "credentials/credential_factory.h"
113 #include "credentials/credential_manager.h"
114 #include "credentials/cred_encoding.h"
115 #include "utils/chunk.h"
116 #include "utils/capabilities.h"
117 #include "utils/integrity_checker.h"
118 #include "utils/leak_detective.h"
119 #include "plugins/plugin_loader.h"
120 #include "settings/settings.h"
121
122 typedef struct library_t library_t;
123
124 /**
125 * Libstrongswan library context, contains library relevant globals.
126 */
127 struct library_t {
128
129 /**
130 * Get an arbitrary object registered by name.
131 *
132 * @param name name of the object to get
133 * @return object, NULL if none found
134 */
135 void* (*get)(library_t *this, char *name);
136
137 /**
138 * (Un-)Register an arbitrary object using the given name.
139 *
140 * @param name name to register object under
141 * @param object object to register, NULL to unregister
142 * @return TRUE if registered, FALSE if name already taken
143 */
144 bool (*set)(library_t *this, char *name, void *object);
145
146 /**
147 * Namespace used for settings etc. (i.e. the name of the binary that uses
148 * the library)
149 */
150 const char *ns;
151
152 /**
153 * Main configuration file passed to library_init(), the default, or NULL
154 */
155 char *conf;
156
157 /**
158 * Printf hook registering facility
159 */
160 printf_hook_t *printf_hook;
161
162 /**
163 * Proposal keywords registry
164 */
165 proposal_keywords_t *proposal;
166
167 /**
168 * POSIX capability dropping
169 */
170 capabilities_t *caps;
171
172 /**
173 * crypto algorithm registry and factory
174 */
175 crypto_factory_t *crypto;
176
177 /**
178 * credential constructor registry and factory
179 */
180 credential_factory_t *creds;
181
182 /**
183 * Manager for the credential set backends
184 */
185 credential_manager_t *credmgr;
186
187 /**
188 * Credential encoding registry and factory
189 */
190 cred_encoding_t *encoding;
191
192 /**
193 * URL fetching facility
194 */
195 fetcher_manager_t *fetcher;
196
197 /**
198 * Manager for DNS resolvers
199 */
200 resolver_manager_t *resolver;
201
202 /**
203 * database construction factory
204 */
205 database_factory_t *db;
206
207 /**
208 * plugin loading facility
209 */
210 plugin_loader_t *plugins;
211
212 /**
213 * process jobs using a thread pool
214 */
215 processor_t *processor;
216
217 /**
218 * schedule jobs
219 */
220 scheduler_t *scheduler;
221
222 /**
223 * File descriptor monitoring
224 */
225 watcher_t *watcher;
226
227 /**
228 * Streams and Services
229 */
230 stream_manager_t *streams;
231
232 /**
233 * resolve hosts by DNS name
234 */
235 host_resolver_t *hosts;
236
237 /**
238 * various settings loaded from settings file
239 */
240 settings_t *settings;
241
242 /**
243 * integrity checker to verify code integrity
244 */
245 integrity_checker_t *integrity;
246
247 /**
248 * Leak detective, if built and enabled
249 */
250 leak_detective_t *leak_detective;
251 };
252
253 /**
254 * Initialize library, creates "lib" instance.
255 *
256 * library_init() may be called multiple times in a single process, but each
257 * caller must call library_deinit() for each call to library_init().
258 *
259 * The settings and namespace arguments are only used on the first call.
260 *
261 * @param settings file to read settings from, may be NULL for default
262 * @param namespace name of the binary that uses the library, determines
263 * the first section name when reading config options.
264 * Defaults to libstrongswan if NULL.
265 * @return FALSE if integrity check failed
266 */
267 bool library_init(char *settings, const char *namespace);
268
269 /**
270 * Deinitialize library, destroys "lib" instance.
271 */
272 void library_deinit();
273
274 /**
275 * Library instance, set after library_init() and before library_deinit() calls.
276 */
277 extern library_t *lib;
278
279 #endif /** LIBRARY_H_ @}*/