Return to library.h CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / strongswan / src / libstrongswan |
1.1 ! misho 1: /* ! 2: * Copyright (C) 2010-2018 Tobias Brunner ! 3: * Copyright (C) 2008 Martin Willi ! 4: * HSR 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 or ! 262: * "" to not load any settings ! 263: * @param namespace name of the binary that uses the library, determines ! 264: * the first section name when reading config options. ! 265: * Defaults to libstrongswan if NULL. ! 266: * @return FALSE if integrity check failed or settings are invalid ! 267: */ ! 268: bool library_init(char *settings, const char *namespace); ! 269: ! 270: /** ! 271: * Deinitialize library, destroys "lib" instance. ! 272: */ ! 273: void library_deinit(); ! 274: ! 275: /** ! 276: * Library instance, set after library_init() and before library_deinit() calls. ! 277: */ ! 278: extern library_t *lib; ! 279: ! 280: /** ! 281: * Add additional names used as alias for the namespace registered with ! 282: * library_init(). ! 283: * ! 284: * To be called from __attribute__((constructor)) functions. ! 285: * ! 286: * @param ns additional namespace ! 287: */ ! 288: void library_add_namespace(char *ns); ! 289: ! 290: #endif /** LIBRARY_H_ @}*/