File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / strongswan / src / libstrongswan / library.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Jun 3 09:46:43 2020 UTC (4 years, 4 months ago) by misho
Branches: strongswan, MAIN
CVS tags: v5_9_2p0, v5_8_4p7, HEAD
Strongswan

    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>