mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-24 04:13:28 +01:00
Only send reachability status events on overall success/failure
We were telling the controller about CHECKING_REACHABILITY and REACHABILITY_FAILED status events whenever we launch a testing circuit or notice that one has failed. Instead, only tell the controller when we want to inform the user of overall success or overall failure. Bugfix on 0.1.2.6-alpha. Fixes bug 1075. Reported by SwissTorExit.
This commit is contained in:
parent
64f393d56f
commit
4c297f74f7
@ -23,6 +23,12 @@ Changes in version 0.2.1.20 - 2009-??-??
|
||||
a wrong clock. Instead, we should only inform the controller when
|
||||
it's a trusted authority that claims our clock is wrong. Bugfix
|
||||
on 0.2.0.20-rc; starts to fix bug 1074. Reported by SwissTorExit.
|
||||
- We were telling the controller about CHECKING_REACHABILITY and
|
||||
REACHABILITY_FAILED status events whenever we launch a testing
|
||||
circuit or notice that one has failed. Instead, only tell the
|
||||
controller when we want to inform the user of overall success or
|
||||
overall failure. Bugfix on 0.1.2.6-alpha. Fixes bug 1075. Reported
|
||||
by SwissTorExit.
|
||||
|
||||
|
||||
Changes in version 0.2.1.19 - 2009-07-28
|
||||
|
@ -527,9 +527,16 @@ inform_testing_reachability(void)
|
||||
routerinfo_t *me = router_get_my_routerinfo();
|
||||
if (!me)
|
||||
return 0;
|
||||
if (me->dir_port)
|
||||
control_event_server_status(LOG_NOTICE,
|
||||
"CHECKING_REACHABILITY ORADDRESS=%s:%d",
|
||||
me->address, me->or_port);
|
||||
if (me->dir_port) {
|
||||
tor_snprintf(dirbuf, sizeof(dirbuf), " and DirPort %s:%d",
|
||||
me->address, me->dir_port);
|
||||
control_event_server_status(LOG_NOTICE,
|
||||
"CHECKING_REACHABILITY DIRADDRESS=%s:%d",
|
||||
me->address, me->dir_port);
|
||||
}
|
||||
log(LOG_NOTICE, LD_OR, "Now checking whether ORPort %s:%d%s %s reachable... "
|
||||
"(this may take up to %d minutes -- look for log "
|
||||
"messages indicating success)",
|
||||
@ -537,6 +544,7 @@ inform_testing_reachability(void)
|
||||
me->dir_port ? dirbuf : "",
|
||||
me->dir_port ? "are" : "is",
|
||||
TIMEOUT_UNTIL_UNREACHABILITY_COMPLAINT/60);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -724,17 +724,12 @@ circuit_testing_opened(origin_circuit_t *circ)
|
||||
static void
|
||||
circuit_testing_failed(origin_circuit_t *circ, int at_last_hop)
|
||||
{
|
||||
routerinfo_t *me = router_get_my_routerinfo();
|
||||
if (server_mode(get_options()) && check_whether_orport_reachable())
|
||||
return;
|
||||
if (!me)
|
||||
return;
|
||||
|
||||
log_info(LD_GENERAL,
|
||||
"Our testing circuit (to see if your ORPort is reachable) "
|
||||
"has failed. I'll try again later.");
|
||||
control_event_server_status(LOG_WARN, "REACHABILITY_FAILED ORADDRESS=%s:%d",
|
||||
me->address, me->or_port);
|
||||
|
||||
/* These aren't used yet. */
|
||||
(void)circ;
|
||||
|
@ -554,11 +554,6 @@ void
|
||||
connection_dir_request_failed(dir_connection_t *conn)
|
||||
{
|
||||
if (directory_conn_is_self_reachability_test(conn)) {
|
||||
routerinfo_t *me = router_get_my_routerinfo();
|
||||
if (me)
|
||||
control_event_server_status(LOG_WARN,
|
||||
"REACHABILITY_FAILED DIRADDRESS=%s:%d",
|
||||
me->address, me->dir_port);
|
||||
return; /* this was a test fetch. don't retry. */
|
||||
}
|
||||
if (entry_list_can_grow(get_options()))
|
||||
|
@ -1185,17 +1185,26 @@ second_elapsed_callback(int fd, short event, void *args)
|
||||
TIMEOUT_UNTIL_UNREACHABILITY_COMPLAINT) {
|
||||
/* every 20 minutes, check and complain if necessary */
|
||||
routerinfo_t *me = router_get_my_routerinfo();
|
||||
if (me && !check_whether_orport_reachable())
|
||||
if (me && !check_whether_orport_reachable()) {
|
||||
log_warn(LD_CONFIG,"Your server (%s:%d) has not managed to confirm that "
|
||||
"its ORPort is reachable. Please check your firewalls, ports, "
|
||||
"address, /etc/hosts file, etc.",
|
||||
me->address, me->or_port);
|
||||
if (me && !check_whether_dirport_reachable())
|
||||
control_event_server_status(LOG_WARN,
|
||||
"REACHABILITY_FAILED ORADDRESS=%s:%d",
|
||||
me->address, me->or_port);
|
||||
}
|
||||
|
||||
if (me && !check_whether_dirport_reachable()) {
|
||||
log_warn(LD_CONFIG,
|
||||
"Your server (%s:%d) has not managed to confirm that its "
|
||||
"DirPort is reachable. Please check your firewalls, ports, "
|
||||
"address, /etc/hosts file, etc.",
|
||||
me->address, me->dir_port);
|
||||
control_event_server_status(LOG_WARN,
|
||||
"REACHABILITY_FAILED DIRADDRESS=%s:%d",
|
||||
me->address, me->dir_port);
|
||||
}
|
||||
}
|
||||
|
||||
/** If more than this many seconds have elapsed, probably the clock
|
||||
|
@ -770,9 +770,6 @@ consider_testing_reachability(int test_or, int test_dir)
|
||||
me->address, me->or_port);
|
||||
circuit_launch_by_router(CIRCUIT_PURPOSE_TESTING, me,
|
||||
CIRCLAUNCH_NEED_CAPACITY|CIRCLAUNCH_IS_INTERNAL);
|
||||
control_event_server_status(LOG_NOTICE,
|
||||
"CHECKING_REACHABILITY ORADDRESS=%s:%d",
|
||||
me->address, me->or_port);
|
||||
}
|
||||
|
||||
tor_addr_from_ipv4h(&addr, me->addr);
|
||||
@ -788,10 +785,6 @@ consider_testing_reachability(int test_or, int test_dir)
|
||||
DIR_PURPOSE_FETCH_SERVERDESC,
|
||||
ROUTER_PURPOSE_GENERAL,
|
||||
1, "authority.z", NULL, 0, 0);
|
||||
|
||||
control_event_server_status(LOG_NOTICE,
|
||||
"CHECKING_REACHABILITY DIRADDRESS=%s:%d",
|
||||
me->address, me->dir_port);
|
||||
}
|
||||
}
|
||||
|
||||
@ -807,8 +800,11 @@ router_orport_found_reachable(void)
|
||||
" Publishing server descriptor." : "");
|
||||
can_reach_or_port = 1;
|
||||
mark_my_descriptor_dirty();
|
||||
if (!me)
|
||||
if (!me) { /* should never happen */
|
||||
log_warn(LD_BUG, "ORPort found reachable, but I have no routerinfo "
|
||||
"yet. Failing to inform controller of success.");
|
||||
return;
|
||||
}
|
||||
control_event_server_status(LOG_NOTICE,
|
||||
"REACHABILITY_SUCCEEDED ORADDRESS=%s:%d",
|
||||
me->address, me->or_port);
|
||||
@ -826,8 +822,11 @@ router_dirport_found_reachable(void)
|
||||
can_reach_dir_port = 1;
|
||||
if (!me || decide_to_advertise_dirport(get_options(), me->dir_port))
|
||||
mark_my_descriptor_dirty();
|
||||
if (!me)
|
||||
if (!me) { /* should never happen */
|
||||
log_warn(LD_BUG, "DirPort found reachable, but I have no routerinfo "
|
||||
"yet. Failing to inform controller of success.");
|
||||
return;
|
||||
}
|
||||
control_event_server_status(LOG_NOTICE,
|
||||
"REACHABILITY_SUCCEEDED DIRADDRESS=%s:%d",
|
||||
me->address, me->dir_port);
|
||||
|
Loading…
Reference in New Issue
Block a user