Commit 65eb0e41 authored by Nick Mathewson's avatar Nick Mathewson 🐘
Browse files

Use cbt to tell when to launch parallel intro circuit

Implement feature from trac #2799
parent aa950e6c
Loading
Loading
Loading
Loading
+4 −0
Changes for changes/cbt_parallel_intro: 4 added lines, 0 removed lines.
Original line number Diff line number Diff line
  o Minor features
    - Use computed circuit-build timeouts to decide when to launch
      parallel introdution circuits.  (Previously, we would retry
      after 15 seconds.)
+5 −6
Changes for src/or/circuituse.c: 5 added lines, 6 removed lines.
Original line number Diff line number Diff line
@@ -204,7 +204,7 @@ circuit_get_best(edge_connection_t *conn, int must_be_open, uint8_t purpose,
                 int need_uptime, int need_internal)
{
  circuit_t *circ, *best=NULL;
  time_t now = time(NULL);
  struct timeval now;
  int intro_going_on_but_too_old = 0;

  tor_assert(conn);
@@ -213,17 +213,16 @@ circuit_get_best(edge_connection_t *conn, int must_be_open, uint8_t purpose,
             purpose == CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT ||
             purpose == CIRCUIT_PURPOSE_C_REND_JOINED);

  tor_gettimeofday(&now);

  for (circ=global_circuitlist;circ;circ = circ->next) {
    if (!circuit_is_acceptable(circ,conn,must_be_open,purpose,
                               need_uptime,need_internal,now))
                               need_uptime,need_internal,now.tv_sec))
      continue;

/* XXX022 make this 15 be a function of circuit finishing times we've
 * seen lately, a la Fallon Chen's GSoC work -RD */
#define REND_PARALLEL_INTRO_DELAY 15
    if (purpose == CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT &&
        !must_be_open && circ->state != CIRCUIT_STATE_OPEN &&
             circ->timestamp_created.tv_sec + REND_PARALLEL_INTRO_DELAY < now) {
        tv_mdiff(&now, &circ->timestamp_created) > circ_times.timeout_ms) {
      intro_going_on_but_too_old = 1;
      continue;
    }