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
|
clients can now "optimistically" send data on a stream before
|
||||||
the exit node reports that the stream has opened. This can save
|
the exit node reports that the stream has opened. This can save
|
||||||
a round trip when starting connections with protocols where the
|
a round trip when starting connections with protocols where the
|
||||||
client speaks first. Implements proposal 181; code by Ian
|
client speaks first. This behavior is controlled by a (currently
|
||||||
Goldberg.
|
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
|
that have the **AllowSingleHopExits** option turned on to build
|
||||||
one-hop Tor connections. (Default: 0)
|
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
|
SERVER OPTIONS
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
#include "connection_edge.h"
|
#include "connection_edge.h"
|
||||||
#include "control.h"
|
#include "control.h"
|
||||||
#include "nodelist.h"
|
#include "nodelist.h"
|
||||||
|
#include "networkstatus.h"
|
||||||
#include "policies.h"
|
#include "policies.h"
|
||||||
#include "rendclient.h"
|
#include "rendclient.h"
|
||||||
#include "rendcommon.h"
|
#include "rendcommon.h"
|
||||||
@ -1541,6 +1542,19 @@ cpath_is_on_circuit(origin_circuit_t *circ, crypt_path_t *crypt_path)
|
|||||||
return 0;
|
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
|
/** 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
|
* 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.
|
* 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)) &&
|
apconn->cpath_layer->extend_info->identity_digest)) &&
|
||||||
exitnode->rs) {
|
exitnode->rs) {
|
||||||
/* Okay; we know what exit node this is. */
|
/* 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)
|
exitnode->rs->version_supports_optimistic_data)
|
||||||
apconn->exit_allows_optimistic_data = 1;
|
apconn->exit_allows_optimistic_data = 1;
|
||||||
else
|
else
|
||||||
|
@ -337,6 +337,7 @@ static config_var_t _option_vars[] = {
|
|||||||
V(PerConnBWRate, MEMUNIT, "0"),
|
V(PerConnBWRate, MEMUNIT, "0"),
|
||||||
V(PidFile, STRING, NULL),
|
V(PidFile, STRING, NULL),
|
||||||
V(TestingTorNetwork, BOOL, "0"),
|
V(TestingTorNetwork, BOOL, "0"),
|
||||||
|
V(OptimisticData, AUTOBOOL, "auto"),
|
||||||
V(PortForwarding, BOOL, "0"),
|
V(PortForwarding, BOOL, "0"),
|
||||||
V(PortForwardingHelper, FILENAME, "tor-fw-helper"),
|
V(PortForwardingHelper, FILENAME, "tor-fw-helper"),
|
||||||
V(PreferTunneledDirConns, BOOL, "1"),
|
V(PreferTunneledDirConns, BOOL, "1"),
|
||||||
|
@ -3271,6 +3271,10 @@ typedef struct {
|
|||||||
* once. */
|
* once. */
|
||||||
int MaxClientCircuitsPending;
|
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;
|
} or_options_t;
|
||||||
|
|
||||||
/** Persistent state for an onion router, as saved to disk. */
|
/** Persistent state for an onion router, as saved to disk. */
|
||||||
|
Loading…
Reference in New Issue
Block a user