1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- /* Copyright (c) 2003-2004, Roger Dingledine
- * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2018, The Tor Project, Inc. */
- /* See LICENSE for licensing information */
- #ifndef TOR_SUBSYS_T
- #define TOR_SUBSYS_T
- #include <stdbool.h>
- struct dispatch_connector_t;
- /**
- * A subsystem is a part of Tor that is initialized, shut down, configured,
- * and connected to other parts of Tor.
- *
- * Subsystems
- **/
- typedef struct subsys_fns_t {
- /**
- * The name of this subsystem. It should be a programmer-readable
- * identifier.
- **/
- const char *name;
- /**
- * Whether this subsystem is supported -- that is, whether it is compiled
- * into Tor. For most subsystems, this should be true.
- **/
- bool supported;
- /**
- * The 'initialization level' for the subsystem. It should run from -100
- * through +100. The subsystems are initialized from lowest level to
- * highest, and shut down from highest level to lowest.
- **/
- int level;
- /**
- * Initialize any global components of this subsystem.
- *
- * This function MAY rely on any lower-level subsystem being initialized.
- *
- * This function MUST NOT rely on any runtime configuration information;
- * it is only for global state or pre-configuration state.
- *
- * This function MUST NOT have any parts that can fail.
- **/
- int (*initialize)(void);
- /**
- * Connect a subsystem to the message dispatch system.
- **/
- int (*add_pubsub)(struct dispatch_connector_t *);
- /**
- * Free all resources held by this subsystem.
- *
- * This function is not allowed to fail.
- **/
- void (*shutdown)(void);
- } subsys_fns_t;
- #define MIN_SUBSYS_LEVEL -100
- #define MAX_SUBSYS_LEVEL 100
- #endif
|