|
@@ -0,0 +1,63 @@
|
|
|
|
+/* 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.
|
|
|
|
+ **/
|
|
|
|
+ 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;
|
|
|
|
+
|
|
|
|
+#endif
|