diff --git a/ChangeLog b/ChangeLog index 47905f810c..50267029d1 100644 --- a/ChangeLog +++ b/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 diff --git a/doc/TODO b/doc/TODO index d096fcb457..d43a7f6327 100644 --- a/doc/TODO +++ b/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 diff --git a/src/or/connection.c b/src/or/connection.c index 8cfea46ea4..f83ea9d7ff 100644 --- a/src/or/connection.c +++ b/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 diff --git a/src/or/connection_or.c b/src/or/connection_or.c index 1081a46437..b9bc5f40a5 100644 --- a/src/or/connection_or.c +++ b/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)) {