Annotation of embedaddon/strongswan/src/libstrongswan/library.h, revision 1.1.1.1

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_ @}*/

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>