소스 검색

Merge remote-tracking branch 'arma/feature13211'

Nick Mathewson 9 년 전
부모
커밋
6c6ea8c425
3개의 변경된 파일14개의 추가작업 그리고 4개의 파일을 삭제
  1. 6 0
      changes/feature13211
  2. 6 3
      src/or/circuituse.c
  3. 2 1
      src/or/connection_edge.c

+ 6 - 0
changes/feature13211

@@ -0,0 +1,6 @@
+  o Major features (performance):
+    - Allow clients to use optimistic data when connecting to a hidden
+      service, which should cut out the initial round-trip for client-side
+      programs including Tor Browser. (Now that Tor 0.2.2.x is obsolete,
+      all hidden services should support server-side optimistic
+      data.) See proposal 181 for details. Implements ticket 13211.

+ 6 - 3
src/or/circuituse.c

@@ -2110,14 +2110,17 @@ link_apconn_to_circ(entry_connection_t *apconn, origin_circuit_t *circ,
 
   /* See if we can use optimistic data on this circuit */
   if (optimistic_data_enabled() &&
-      circ->base_.purpose == CIRCUIT_PURPOSE_C_GENERAL)
+      (circ->base_.purpose == CIRCUIT_PURPOSE_C_GENERAL ||
+       circ->base_.purpose == CIRCUIT_PURPOSE_C_REND_JOINED))
     apconn->may_use_optimistic_data = 1;
   else
     apconn->may_use_optimistic_data = 0;
   log_info(LD_APP, "Looks like completed circuit to %s %s allow "
            "optimistic data for connection to %s",
-           /* node_describe() does the right thing if exitnode is NULL */
-           safe_str_client(node_describe(exitnode)),
+           circ->base_.purpose == CIRCUIT_PURPOSE_C_GENERAL ?
+             /* node_describe() does the right thing if exitnode is NULL */
+             safe_str_client(node_describe(exitnode)) :
+             "hidden service",
            apconn->may_use_optimistic_data ? "does" : "doesn't",
            safe_str_client(apconn->socks_request->address));
 }

+ 2 - 1
src/or/connection_edge.c

@@ -1767,7 +1767,8 @@ connection_ap_supports_optimistic_data(const entry_connection_t *conn)
      general circuit. */
   if (edge_conn->on_circuit == NULL ||
       edge_conn->on_circuit->state != CIRCUIT_STATE_OPEN ||
-      edge_conn->on_circuit->purpose != CIRCUIT_PURPOSE_C_GENERAL)
+      (edge_conn->on_circuit->purpose != CIRCUIT_PURPOSE_C_GENERAL &&
+       edge_conn->on_circuit->purpose != CIRCUIT_PURPOSE_C_REND_JOINED))
     return 0;
 
   return conn->may_use_optimistic_data;