2018-11-01 08:18:29 -04:00
|
|
|
/* 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.
|
2018-11-01 11:51:33 -04:00
|
|
|
*
|
|
|
|
* This function MUST NOT have any parts that can fail.
|
2018-11-01 08:18:29 -04:00
|
|
|
**/
|
|
|
|
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;
|
|
|
|
|
2018-11-01 11:51:33 -04:00
|
|
|
#define MIN_SUBSYS_LEVEL -100
|
|
|
|
#define MAX_SUBSYS_LEVEL 100
|
|
|
|
|
2018-11-01 14:13:36 -04:00
|
|
|
/* All tor "libraries" (in src/libs) should have a subsystem level equal to or
|
|
|
|
* less than this value. */
|
|
|
|
#define SUBSYS_LEVEL_LIBS -10
|
|
|
|
|
2018-11-01 08:18:29 -04:00
|
|
|
#endif
|