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