Annotation of embedaddon/strongswan/src/libstrongswan/library.h, revision 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>