Merge branch 'tor-gitlab/mr/337'

This commit is contained in:
David Goulet 2021-03-17 11:53:14 -04:00
commit 15a95df376
7 changed files with 31 additions and 2 deletions

4
changes/ticket40228 Normal file
View File

@ -0,0 +1,4 @@
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.

View File

@ -1879,6 +1879,12 @@ The following options control when Tor enters and leaves dormant mode:
counts as client activity for the purpose of DormantClientTimeout. counts as client activity for the purpose of DormantClientTimeout.
If false, then only network activity counts. (Default: 1) 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 == NODE SELECTION OPTIONS
// These options are in alphabetical order, with exceptions as noted. // These options are in alphabetical order, with exceptions as noted.

View File

@ -422,8 +422,9 @@ static const config_var_t option_vars_[] = {
OBSOLETE("DynamicDHGroups"), OBSOLETE("DynamicDHGroups"),
VPORT(DNSPort), VPORT(DNSPort),
OBSOLETE("DNSListenAddress"), OBSOLETE("DNSListenAddress"),
V(DormantClientTimeout, INTERVAL, "24 hours"), V(DormantClientTimeout, INTERVAL, "24 hours"),
V(DormantTimeoutDisabledByIdleStreams, BOOL, "1"), V(DormantTimeoutEnabled, BOOL, "1"),
V(DormantTimeoutDisabledByIdleStreams, BOOL, "1"),
V(DormantOnFirstStartup, BOOL, "0"), V(DormantOnFirstStartup, BOOL, "0"),
V(DormantCanceledByStartup, BOOL, "0"), V(DormantCanceledByStartup, BOOL, "0"),
V(DownloadExtraInfo, BOOL, "0"), V(DownloadExtraInfo, BOOL, "0"),

View File

@ -1033,6 +1033,13 @@ struct or_options_t {
**/ **/
int DormantClientTimeout; 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 /** Boolean: true if having an idle stream is sufficient to prevent a client
* from becoming dormant. * from becoming dormant.
**/ **/

View File

@ -1820,6 +1820,12 @@ check_network_participation_callback(time_t now, const or_options_t *options)
goto found_activity; 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. */ /* 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 /* XXXX this would be nice to change, so that we can be dormant with a
* service. */ * service. */

View File

@ -154,6 +154,9 @@ netstatus_load_from_state(const mainloop_state_t *state, time_t now)
last_activity = now; last_activity = now;
participating_on_network = true; participating_on_network = true;
} }
if (! get_options()->DormantTimeoutEnabled) {
participating_on_network = true;
}
reset_user_activity(last_activity); reset_user_activity(last_activity);
} }

View File

@ -231,6 +231,8 @@ test_mainloop_check_participation(void *arg)
const time_t start = 1542658829; const time_t start = 1542658829;
const time_t ONE_DAY = 24*60*60; const time_t ONE_DAY = 24*60*60;
options->DormantTimeoutEnabled = 1;
// Suppose we've been idle for a day or two // Suppose we've been idle for a day or two
reset_user_activity(start - 2*ONE_DAY); reset_user_activity(start - 2*ONE_DAY);
set_network_participation(true); set_network_participation(true);