Преглед на файлове

we were counting incorrectly when trying to figure out whether
a given AP stream was being handled or not.
(how did this work?)


svn:r2077

Roger Dingledine преди 21 години
родител
ревизия
ddb6eb35af
променени са 3 файла, в които са добавени 14 реда и са изтрити 16 реда
  1. 8 12
      src/or/circuitbuild.c
  2. 2 2
      src/or/circuituse.c
  3. 4 2
      src/or/connection_edge.c

+ 8 - 12
src/or/circuitbuild.c

@@ -855,18 +855,14 @@ static routerinfo_t *choose_good_exit_server_general(routerlist_t *dir)
           carray[j]->marked_for_close ||
           circuit_stream_is_being_handled(carray[j]))
         continue; /* Skip everything but APs in CIRCUIT_WAIT */
-      switch (connection_ap_can_use_exit(carray[j], router))
-        {
-        case ADDR_POLICY_REJECTED:
-          log_fn(LOG_DEBUG,"%s (index %d) would reject this stream.",
-                 router->nickname, i);
-          break; /* would be rejected; try next connection */
-        case ADDR_POLICY_ACCEPTED:
-        case ADDR_POLICY_UNKNOWN:
-          ++n_supported[i];
-          log_fn(LOG_DEBUG,"%s is supported. n_supported[%d] now %d.",
-                 router->nickname, i, n_supported[i]);
-        }
+      if(connection_ap_can_use_exit(carray[j], router)) {
+        ++n_supported[i];
+        log_fn(LOG_DEBUG,"%s is supported. n_supported[%d] now %d.",
+               router->nickname, i, n_supported[i]);
+      } else {
+        log_fn(LOG_DEBUG,"%s (index %d) would reject this stream.",
+               router->nickname, i);
+      }
     } /* End looping over connections. */
     if (n_supported[i] > best_support) {
       /* If this router is better than previous ones, remember its index

+ 2 - 2
src/or/circuituse.c

@@ -82,7 +82,7 @@ static int circuit_is_acceptable(circuit_t *circ,
       if (!strncmp(exitrouter->platform, "Tor 0.0.7", 9))
         return 0;
     } else if(purpose == CIRCUIT_PURPOSE_C_GENERAL) {
-      if(connection_ap_can_use_exit(conn, exitrouter) == ADDR_POLICY_REJECTED) {
+      if(!connection_ap_can_use_exit(conn, exitrouter)) {
         /* can't exit from this router */
         return 0;
       }
@@ -268,7 +268,7 @@ int circuit_stream_is_being_handled(connection_t *conn) {
        (!circ->timestamp_dirty ||
         circ->timestamp_dirty + options.NewCircuitPeriod < now)) {
       exitrouter = router_get_by_digest(circ->build_state->chosen_exit_digest);
-      if(exitrouter && connection_ap_can_use_exit(conn, exitrouter) != ADDR_POLICY_REJECTED)
+      if(exitrouter && connection_ap_can_use_exit(conn, exitrouter))
         if(++num >= MIN_CIRCUITS_HANDLING_STREAM)
           return 1;
     }

+ 4 - 2
src/or/connection_edge.c

@@ -945,8 +945,10 @@ int connection_ap_can_use_exit(connection_t *conn, routerinfo_t *exit)
     return strncmp(exit->platform, "Tor 0.0.7", 9) ? 1 : 0;
   }
   addr = client_dns_lookup_entry(conn->socks_request->address);
-  return router_compare_addr_to_exit_policy(addr,
-           conn->socks_request->port, exit->exit_policy);
+  if(router_compare_addr_to_exit_policy(addr,
+     conn->socks_request->port, exit->exit_policy) < 0)
+    return 0;
+  return 1;
 }
 
 /** A helper function for socks_policy_permits_address() below.