--- /dev/null
+ o Minor features (dormant mode):
+ - Add a new 'DormantTimeoutEnabled' option to allow coarse-grained
+ control over whether the client ever becomes dormant from inactivity.
+ Most people won't need this. Closes ticket 40228.
counts as client activity for the purpose of DormantClientTimeout.
If false, then only network activity counts. (Default: 1)
+[[DormantTimeoutEnabled]] **DormantTimeoutEnabled** **0**|**1**::
+ If false, then no amount of time without activity is sufficient to
+ make Tor go dormant. Setting this option to zero is only recommended for
+ special-purpose applications that need to use the Tor binary for
+ something other than sending or receiving Tor traffic. (Default: 1)
+
== NODE SELECTION OPTIONS
// These options are in alphabetical order, with exceptions as noted.
OBSOLETE("DynamicDHGroups"),
VPORT(DNSPort),
OBSOLETE("DNSListenAddress"),
- V(DormantClientTimeout, INTERVAL, "24 hours"),
- V(DormantTimeoutDisabledByIdleStreams, BOOL, "1"),
+ V(DormantClientTimeout, INTERVAL, "24 hours"),
+ V(DormantTimeoutEnabled, BOOL, "1"),
+ V(DormantTimeoutDisabledByIdleStreams, BOOL, "1"),
V(DormantOnFirstStartup, BOOL, "0"),
V(DormantCanceledByStartup, BOOL, "0"),
/* DoS circuit creation options. */
**/
int DormantClientTimeout;
+ /**
+ * Boolean: If enabled, then we consider the timeout when deciding whether
+ * to be dormant. If not enabled, then only the SIGNAL ACTIVE/DORMANT
+ * controls can change our status.
+ **/
+ int DormantTimeoutEnabled;
+
/** Boolean: true if having an idle stream is sufficient to prevent a client
* from becoming dormant.
**/
goto found_activity;
}
+ /* If we aren't allowed to become dormant, then participation doesn't
+ matter */
+ if (! options->DormantTimeoutEnabled) {
+ goto found_activity;
+ }
+
/* If we're running an onion service, we can't become dormant. */
/* XXXX this would be nice to change, so that we can be dormant with a
* service. */
last_activity = now;
participating_on_network = true;
}
+ if (! get_options()->DormantTimeoutEnabled) {
+ participating_on_network = true;
+ }
reset_user_activity(last_activity);
}
const time_t start = 1542658829;
const time_t ONE_DAY = 24*60*60;
+ options->DormantTimeoutEnabled = 1;
+
// Suppose we've been idle for a day or two
reset_user_activity(start - 2*ONE_DAY);
set_network_participation(true);