Loading changes/optimistic-client +4 −2 Original line number Diff line number Diff line Loading @@ -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. doc/tor.1.txt +10 −0 Original line number Diff line number Diff line Loading @@ -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 -------------- Loading src/or/circuituse.c +16 −1 Original line number Diff line number Diff line Loading @@ -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" Loading Loading @@ -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. Loading Loading @@ -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 Loading src/or/config.c +1 −0 Original line number Diff line number Diff line Loading @@ -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"), Loading src/or/or.h +4 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
changes/optimistic-client +4 −2 Original line number Diff line number Diff line Loading @@ -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.
doc/tor.1.txt +10 −0 Original line number Diff line number Diff line Loading @@ -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 -------------- Loading
src/or/circuituse.c +16 −1 Original line number Diff line number Diff line Loading @@ -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" Loading Loading @@ -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. Loading Loading @@ -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 Loading
src/or/config.c +1 −0 Original line number Diff line number Diff line Loading @@ -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"), Loading
src/or/or.h +4 −0 Original line number Diff line number Diff line Loading @@ -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