mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-24 04:13:28 +01:00
Add an OptimisticData option to control client-side optimistic data
This commit is contained in:
parent
9b0d3719ae
commit
6e923ed8cd
@ -3,5 +3,7 @@
|
||||
clients can now "optimistically" send data on a stream before
|
||||
the exit node reports that the stream has opened. This can save
|
||||
a round trip when starting connections with protocols where the
|
||||
client speaks first. Implements proposal 181; code by Ian
|
||||
Goldberg.
|
||||
client speaks first. This behavior is controlled by a (currently
|
||||
disabled) networkstatus consensus parameter. To turn it on or
|
||||
off manually, use the "OptimisticData" torrc option. Implements
|
||||
proposal 181; code by Ian Goldberg.
|
||||
|
@ -930,6 +930,16 @@ The following options are useful only for clients (that is, if
|
||||
that have the **AllowSingleHopExits** option turned on to build
|
||||
one-hop Tor connections. (Default: 0)
|
||||
|
||||
**OptimisticData** **0**|**1**|**auto**::
|
||||
When this option is set, and Tor is using an exit node that supports
|
||||
the feature, it will try optimistically to send data to the exit node
|
||||
without waiting for the exit node to report whether the connection
|
||||
succeeded. This can save a round-trip time for protocols like HTTP
|
||||
where the client talks first. If OptimisticData is set to **auto**,
|
||||
Tor will look at the UseOptimisticData parameter in the networkstatus.
|
||||
(Default: auto)
|
||||
|
||||
|
||||
SERVER OPTIONS
|
||||
--------------
|
||||
|
||||
|
@ -18,6 +18,7 @@
|
||||
#include "connection_edge.h"
|
||||
#include "control.h"
|
||||
#include "nodelist.h"
|
||||
#include "networkstatus.h"
|
||||
#include "policies.h"
|
||||
#include "rendclient.h"
|
||||
#include "rendcommon.h"
|
||||
@ -1541,6 +1542,19 @@ cpath_is_on_circuit(origin_circuit_t *circ, crypt_path_t *crypt_path)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** Return true iff client-side optimistic data is supported. */
|
||||
static int
|
||||
optimistic_data_enabled(void)
|
||||
{
|
||||
const or_options_t *options = get_options();
|
||||
if (options->OptimisticData < 0) {
|
||||
const int32_t enabled =
|
||||
networkstatus_get_param(NULL, "UseOptimisticData", 0, 0, 1);
|
||||
return (int)enabled;
|
||||
}
|
||||
return options->OptimisticData;
|
||||
}
|
||||
|
||||
/** Attach the AP stream <b>apconn</b> to circ's linked list of
|
||||
* p_streams. Also set apconn's cpath_layer to <b>cpath</b>, or to the last
|
||||
* hop in circ's cpath if <b>cpath</b> is NULL.
|
||||
@ -1580,7 +1594,8 @@ link_apconn_to_circ(edge_connection_t *apconn, origin_circuit_t *circ,
|
||||
apconn->cpath_layer->extend_info->identity_digest)) &&
|
||||
exitnode->rs) {
|
||||
/* Okay; we know what exit node this is. */
|
||||
if (circ->_base.purpose == CIRCUIT_PURPOSE_C_GENERAL &&
|
||||
if (optimistic_data_enabled() &&
|
||||
circ->_base.purpose == CIRCUIT_PURPOSE_C_GENERAL &&
|
||||
exitnode->rs->version_supports_optimistic_data)
|
||||
apconn->exit_allows_optimistic_data = 1;
|
||||
else
|
||||
|
@ -337,6 +337,7 @@ static config_var_t _option_vars[] = {
|
||||
V(PerConnBWRate, MEMUNIT, "0"),
|
||||
V(PidFile, STRING, NULL),
|
||||
V(TestingTorNetwork, BOOL, "0"),
|
||||
V(OptimisticData, AUTOBOOL, "auto"),
|
||||
V(PortForwarding, BOOL, "0"),
|
||||
V(PortForwardingHelper, FILENAME, "tor-fw-helper"),
|
||||
V(PreferTunneledDirConns, BOOL, "1"),
|
||||
|
@ -3271,6 +3271,10 @@ typedef struct {
|
||||
* once. */
|
||||
int MaxClientCircuitsPending;
|
||||
|
||||
/** If 1, we always send optimistic data when it's supported. If 0, we
|
||||
* never use it. If -1, we do what the consensus says. */
|
||||
int OptimisticData;
|
||||
|
||||
} or_options_t;
|
||||
|
||||
/** Persistent state for an onion router, as saved to disk. */
|
||||
|
Loading…
Reference in New Issue
Block a user