Browse Source

Directory authorities shouldn't complain about bootstrapping
problems just because they do a lot of reachability testing and
some of the connection attempts fail.


svn:r15348

Roger Dingledine 16 years ago
parent
commit
c6a94718cd
4 changed files with 21 additions and 13 deletions
  1. 3 0
      ChangeLog
  2. 4 4
      doc/TODO
  3. 9 6
      src/or/connection.c
  4. 5 3
      src/or/connection_or.c

+ 3 - 0
ChangeLog

@@ -26,6 +26,9 @@ Changes in version 0.2.1.2-alpha - 2008-??-??
       from cannibalized circuits are completely ignored and not included in
       rendezvous service descriptors. This might be another reason for delay
       in making a hidden service available. Bugfix on 0.2.0.14-alpha.
+    - Directory authorities shouldn't complain about bootstrapping
+      problems just because they do a lot of reachability testing and
+      some of the connection attempts fail.
 
 
 Changes in version 0.2.1.1-alpha - 2008-06-13

+ 4 - 4
doc/TODO

@@ -329,15 +329,15 @@ R   - then document the bridge user download timeline.
 =======================================================================
 
 For 0.2.1.2-alpha:
-R - bug: if we launch using bridges, and then stop using bridges, we
+R d bug: if we launch using bridges, and then stop using bridges, we
     still have our bridges in our entryguards section, and may use them.
-R - add an event to report geoip summaries to vidalia for bridge relays,
+R d add an event to report geoip summaries to vidalia for bridge relays,
     so vidalia can say "recent activity (1-8 users) from sa".
 R - investigate: it looks like if the bridge authority is unreachable,
     we're not falling back on querying bridges directly?
-R o a getinfo so vidalia can query our current bootstrap state, in
+  o a getinfo so vidalia can query our current bootstrap state, in
     case it attaches partway through and wants to catch up.
-R - directory authorities shouldn't complain about bootstrapping problems
+  o directory authorities shouldn't complain about bootstrapping problems
     just because they do a lot of reachability testing and some of
     it fails.
 R - if your bridge is unreachable, it won't generate enough connection

+ 9 - 6
src/or/connection.c

@@ -495,23 +495,26 @@ connection_about_to_close_connection(connection_t *conn)
       /* Remember why we're closing this connection. */
       if (conn->state != OR_CONN_STATE_OPEN) {
         if (connection_or_nonopen_was_started_here(or_conn)) {
+          or_options_t *options = get_options();
           rep_hist_note_connect_failed(or_conn->identity_digest, now);
           entry_guard_register_connect_status(or_conn->identity_digest,0,now);
-          if (!get_options()->HttpsProxy)
+          if (!options->HttpsProxy)
             router_set_status(or_conn->identity_digest, 0);
           if (conn->state == OR_CONN_STATE_CONNECTING) {
             control_event_or_conn_status(or_conn, OR_CONN_EVENT_FAILED,
               errno_to_orconn_end_reason(or_conn->socket_error));
-            control_event_bootstrap_problem(
-              tor_socket_strerror(or_conn->socket_error),
-              errno_to_orconn_end_reason(or_conn->socket_error));
+            if (!authdir_mode_tests_reachability(options))
+              control_event_bootstrap_problem(
+                tor_socket_strerror(or_conn->socket_error),
+                errno_to_orconn_end_reason(or_conn->socket_error));
           } else {
             int reason = tls_error_to_orconn_end_reason(or_conn->tls_error);
             control_event_or_conn_status(or_conn, OR_CONN_EVENT_FAILED,
                                          reason);
             /* XXX021 come up with a better string for the first arg */
-            control_event_bootstrap_problem(
-              orconn_end_reason_to_control_string(reason), reason);
+            if (!authdir_mode_tests_reachability(options))
+              control_event_bootstrap_problem(
+                orconn_end_reason_to_control_string(reason), reason);
           }
         }
         /* Inform any pending (not attached) circs that they should

+ 5 - 3
src/or/connection_or.c

@@ -548,8 +548,9 @@ connection_or_connect(uint32_t addr, uint16_t port, const char *id_digest)
       }
       control_event_or_conn_status(conn, OR_CONN_EVENT_FAILED,
                                    errno_to_orconn_end_reason(socket_error));
-      control_event_bootstrap_problem(tor_socket_strerror(socket_error),
-                                   errno_to_orconn_end_reason(socket_error));
+      if (!authdir_mode_tests_reachability(options))
+        control_event_bootstrap_problem(tor_socket_strerror(socket_error),
+                                     errno_to_orconn_end_reason(socket_error));
       connection_free(TO_CONN(conn));
       return NULL;
     case 0:
@@ -799,7 +800,8 @@ connection_or_check_valid_tls_handshake(or_connection_t *conn,
       router_set_status(conn->identity_digest, 0);
       control_event_or_conn_status(conn, OR_CONN_EVENT_FAILED,
               END_OR_CONN_REASON_OR_IDENTITY);
-      control_event_bootstrap_problem("foo", END_OR_CONN_REASON_OR_IDENTITY);
+      if (!authdir_mode_tests_reachability(options))
+        control_event_bootstrap_problem("foo", END_OR_CONN_REASON_OR_IDENTITY);
       as_advertised = 0;
     }
     if (authdir_mode_tests_reachability(options)) {