/* 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 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