summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/tor.1.txt11
-rw-r--r--src/app/config/config.c1
-rw-r--r--src/app/config/or_options_st.h4
-rw-r--r--src/core/mainloop/netstatus.c10
4 files changed, 23 insertions, 3 deletions
diff --git a/doc/tor.1.txt b/doc/tor.1.txt
index 8e6ec7f1a2..82c9e34de4 100644
--- a/doc/tor.1.txt
+++ b/doc/tor.1.txt
@@ -1803,11 +1803,20 @@ The following options are useful only for clients (that is, if
Does not affect servers or onion services. Must be at least 10 minutes.
(Default: 24 hours)
-[[DormantTimeoutDisabledByIdleStreams]] **DormantTimeoutDisabledByIdleStreams **0**|**1**::
+[[DormantTimeoutDisabledByIdleStreams]] **DormantTimeoutDisabledByIdleStreams** **0**|**1**::
If true, then any open client stream (even one not reading or writing)
counts as client activity for the purpose of DormantClientTimeout.
If false, then only network activity counts. (Default: 1)
+[[DormantOnFirstStartup]] **DormantOnFirstStartup** **0**|**1**::
+ If true, then the first time Tor starts up with a fresh DataDirectory,
+ it starts in dormant mode, and takes no actions until the user has made
+ a request. (This mode is recommended if installing a Tor client for a
+ user who might not actually use it.) If false, Tor bootstraps the first
+ time it is started, whether it sees a user request or not.
+ +
+ After the first time Tor starts, it begins in dormant mode if it was
+ dormant before, and not otherwise. (Default: 0)
SERVER OPTIONS
--------------
diff --git a/src/app/config/config.c b/src/app/config/config.c
index d40e362b32..dcefa3d6a4 100644
--- a/src/app/config/config.c
+++ b/src/app/config/config.c
@@ -392,6 +392,7 @@ static config_var_t option_vars_[] = {
OBSOLETE("DNSListenAddress"),
V(DormantClientTimeout, INTERVAL, "24 hours"),
V(DormantTimeoutDisabledByIdleStreams, BOOL, "1"),
+ V(DormantOnFirstStartup, BOOL, "0"),
/* DoS circuit creation options. */
V(DoSCircuitCreationEnabled, AUTOBOOL, "auto"),
V(DoSCircuitCreationMinConnections, UINT, "0"),
diff --git a/src/app/config/or_options_st.h b/src/app/config/or_options_st.h
index 9065248a9c..c2bc1079a5 100644
--- a/src/app/config/or_options_st.h
+++ b/src/app/config/or_options_st.h
@@ -1085,6 +1085,10 @@ struct or_options_t {
* from becoming dormant.
**/
int DormantTimeoutDisabledByIdleStreams;
+
+ /** Boolean: true if Tor should be dormant the first time it starts with
+ * a datadirectory; false otherwise. */
+ int DormantOnFirstStartup;
};
#endif
diff --git a/src/core/mainloop/netstatus.c b/src/core/mainloop/netstatus.c
index 59fd8f8037..2426baae34 100644
--- a/src/core/mainloop/netstatus.c
+++ b/src/core/mainloop/netstatus.c
@@ -129,8 +129,14 @@ netstatus_load_from_state(const or_state_t *state, time_t now)
{
time_t last_activity;
if (state->Dormant == -1) { // Initial setup.
- last_activity = now;
- participating_on_network = true;
+ if (get_options()->DormantOnFirstStartup) {
+ last_activity = 0;
+ participating_on_network = false;
+ } else {
+ // Start up as active, treat activity as happening now.
+ last_activity = now;
+ participating_on_network = true;
+ }
} else if (state->Dormant) {
last_activity = 0;
participating_on_network = false;