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 17 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
       from cannibalized circuits are completely ignored and not included in
       rendezvous service descriptors. This might be another reason for delay
       rendezvous service descriptors. This might be another reason for delay
       in making a hidden service available. Bugfix on 0.2.0.14-alpha.
       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
 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:
 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.
     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".
     so vidalia can say "recent activity (1-8 users) from sa".
 R - investigate: it looks like if the bridge authority is unreachable,
 R - investigate: it looks like if the bridge authority is unreachable,
     we're not falling back on querying bridges directly?
     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.
     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
     just because they do a lot of reachability testing and some of
     it fails.
     it fails.
 R - if your bridge is unreachable, it won't generate enough connection
 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. */
       /* Remember why we're closing this connection. */
       if (conn->state != OR_CONN_STATE_OPEN) {
       if (conn->state != OR_CONN_STATE_OPEN) {
         if (connection_or_nonopen_was_started_here(or_conn)) {
         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);
           rep_hist_note_connect_failed(or_conn->identity_digest, now);
           entry_guard_register_connect_status(or_conn->identity_digest,0,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);
             router_set_status(or_conn->identity_digest, 0);
           if (conn->state == OR_CONN_STATE_CONNECTING) {
           if (conn->state == OR_CONN_STATE_CONNECTING) {
             control_event_or_conn_status(or_conn, OR_CONN_EVENT_FAILED,
             control_event_or_conn_status(or_conn, OR_CONN_EVENT_FAILED,
               errno_to_orconn_end_reason(or_conn->socket_error));
               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 {
           } else {
             int reason = tls_error_to_orconn_end_reason(or_conn->tls_error);
             int reason = tls_error_to_orconn_end_reason(or_conn->tls_error);
             control_event_or_conn_status(or_conn, OR_CONN_EVENT_FAILED,
             control_event_or_conn_status(or_conn, OR_CONN_EVENT_FAILED,
                                          reason);
                                          reason);
             /* XXX021 come up with a better string for the first arg */
             /* 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
         /* 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,
       control_event_or_conn_status(conn, OR_CONN_EVENT_FAILED,
                                    errno_to_orconn_end_reason(socket_error));
                                    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));
       connection_free(TO_CONN(conn));
       return NULL;
       return NULL;
     case 0:
     case 0:
@@ -799,7 +800,8 @@ connection_or_check_valid_tls_handshake(or_connection_t *conn,
       router_set_status(conn->identity_digest, 0);
       router_set_status(conn->identity_digest, 0);
       control_event_or_conn_status(conn, OR_CONN_EVENT_FAILED,
       control_event_or_conn_status(conn, OR_CONN_EVENT_FAILED,
               END_OR_CONN_REASON_OR_IDENTITY);
               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;
       as_advertised = 0;
     }
     }
     if (authdir_mode_tests_reachability(options)) {
     if (authdir_mode_tests_reachability(options)) {