mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-30 23:53:32 +01:00
make it clearer to the human that his server is testing
its reachability. tell him when it succeeds, or when 20 minutes pass and it hasn't succeeded yet. svn:r3882
This commit is contained in:
parent
e203d47192
commit
1328383482
@ -463,9 +463,14 @@ int circuit_send_next_onion_skin(circuit_t *circ) {
|
|||||||
log_fn(LOG_INFO,"circuit built!");
|
log_fn(LOG_INFO,"circuit built!");
|
||||||
circuit_reset_failure_count(0);
|
circuit_reset_failure_count(0);
|
||||||
if (!has_completed_circuit) {
|
if (!has_completed_circuit) {
|
||||||
|
or_options_t *options = get_options();
|
||||||
has_completed_circuit=1;
|
has_completed_circuit=1;
|
||||||
log_fn(LOG_NOTICE,"Tor has successfully opened a circuit. Looks like it's working.");
|
log_fn(LOG_NOTICE,"Tor has successfully opened a circuit. Looks like it's working.");
|
||||||
/* XXX009 Log a count of known routers here */
|
/* XXX009 Log a count of known routers here */
|
||||||
|
if (server_mode(options) && !check_whether_ports_reachable())
|
||||||
|
log_fn(LOG_NOTICE,"Now checking whether ORPort %s %s reachable...",
|
||||||
|
options->DirPort ? "and DirPort" : "",
|
||||||
|
options->DirPort ? "are" : "is");
|
||||||
}
|
}
|
||||||
circuit_rep_hist_note_result(circ);
|
circuit_rep_hist_note_result(circ);
|
||||||
circuit_has_opened(circ); /* do other actions as necessary */
|
circuit_has_opened(circ); /* do other actions as necessary */
|
||||||
|
@ -1163,7 +1163,6 @@ int connection_handle_write(connection_t *conn) {
|
|||||||
connection_edge_end_errno(conn, conn->cpath_layer);
|
connection_edge_end_errno(conn, conn->cpath_layer);
|
||||||
|
|
||||||
connection_close_immediate(conn); /* Don't flush; connection is dead. */
|
connection_close_immediate(conn); /* Don't flush; connection is dead. */
|
||||||
conn->has_sent_end = 1;
|
|
||||||
connection_mark_for_close(conn);
|
connection_mark_for_close(conn);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -775,6 +775,7 @@ static void second_elapsed_callback(int fd, short event, void *args)
|
|||||||
size_t bytes_written;
|
size_t bytes_written;
|
||||||
size_t bytes_read;
|
size_t bytes_read;
|
||||||
int seconds_elapsed;
|
int seconds_elapsed;
|
||||||
|
or_options_t *options = get_options();
|
||||||
if (!timeout_event) {
|
if (!timeout_event) {
|
||||||
timeout_event = tor_malloc_zero(sizeof(struct event));
|
timeout_event = tor_malloc_zero(sizeof(struct event));
|
||||||
evtimer_set(timeout_event, second_elapsed_callback, NULL);
|
evtimer_set(timeout_event, second_elapsed_callback, NULL);
|
||||||
@ -797,7 +798,7 @@ static void second_elapsed_callback(int fd, short event, void *args)
|
|||||||
seconds_elapsed = current_second ? (now.tv_sec - current_second) : 0;
|
seconds_elapsed = current_second ? (now.tv_sec - current_second) : 0;
|
||||||
stats_n_bytes_read += bytes_read;
|
stats_n_bytes_read += bytes_read;
|
||||||
stats_n_bytes_written += bytes_written;
|
stats_n_bytes_written += bytes_written;
|
||||||
if (accounting_is_enabled(get_options()))
|
if (accounting_is_enabled(options))
|
||||||
accounting_add_bytes(bytes_read, bytes_written, seconds_elapsed);
|
accounting_add_bytes(bytes_read, bytes_written, seconds_elapsed);
|
||||||
control_event_bandwidth_used((uint32_t)bytes_read,(uint32_t)bytes_written);
|
control_event_bandwidth_used((uint32_t)bytes_read,(uint32_t)bytes_written);
|
||||||
|
|
||||||
@ -805,6 +806,17 @@ static void second_elapsed_callback(int fd, short event, void *args)
|
|||||||
stats_prev_global_read_bucket = global_read_bucket;
|
stats_prev_global_read_bucket = global_read_bucket;
|
||||||
stats_prev_global_write_bucket = global_write_bucket;
|
stats_prev_global_write_bucket = global_write_bucket;
|
||||||
|
|
||||||
|
#define TIMEOUT_UNTIL_UNREACHABILITY_COMPLAINT (20*60) /* 20 minutes */
|
||||||
|
if (server_mode(options) &&
|
||||||
|
stats_n_seconds_working < TIMEOUT_UNTIL_UNREACHABILITY_COMPLAINT &&
|
||||||
|
stats_n_seconds_working+seconds_elapsed >=
|
||||||
|
TIMEOUT_UNTIL_UNREACHABILITY_COMPLAINT &&
|
||||||
|
!check_whether_ports_reachable()) {
|
||||||
|
routerinfo_t *me = router_get_my_routerinfo();
|
||||||
|
tor_assert(me);
|
||||||
|
log_fn(LOG_WARN,"Your server (%s:%d) has not managed to confirm that it is reachable. Please check your firewalls, ports, address, etc.", me->address, me->or_port);
|
||||||
|
}
|
||||||
|
|
||||||
/* if more than 10s have elapsed, probably the clock jumped: doesn't count. */
|
/* if more than 10s have elapsed, probably the clock jumped: doesn't count. */
|
||||||
if (seconds_elapsed < 100)
|
if (seconds_elapsed < 100)
|
||||||
stats_n_seconds_working += seconds_elapsed;
|
stats_n_seconds_working += seconds_elapsed;
|
||||||
@ -932,11 +944,11 @@ static int do_main_loop(void) {
|
|||||||
int e = errno;
|
int e = errno;
|
||||||
/* let the program survive things like ^z */
|
/* let the program survive things like ^z */
|
||||||
if (e != EINTR) {
|
if (e != EINTR) {
|
||||||
log_fn(LOG_ERR,"poll failed: %s [%d]",
|
log_fn(LOG_ERR,"event poll failed: %s [%d]",
|
||||||
tor_socket_strerror(e), e);
|
tor_socket_strerror(e), e);
|
||||||
return -1;
|
return -1;
|
||||||
} else {
|
} else {
|
||||||
log_fn(LOG_DEBUG,"poll interrupted.");
|
log_fn(LOG_DEBUG,"event poll interrupted.");
|
||||||
/* You can't trust the results of this poll(). Go back to the
|
/* You can't trust the results of this poll(). Go back to the
|
||||||
* top of the big for loop. */
|
* top of the big for loop. */
|
||||||
continue;
|
continue;
|
||||||
|
@ -1694,6 +1694,7 @@ void rotate_onion_key(void);
|
|||||||
crypto_pk_env_t *init_key_from_file(const char *fname);
|
crypto_pk_env_t *init_key_from_file(const char *fname);
|
||||||
int init_keys(void);
|
int init_keys(void);
|
||||||
|
|
||||||
|
int check_whether_ports_reachable(void);
|
||||||
void consider_testing_reachability(void);
|
void consider_testing_reachability(void);
|
||||||
void router_orport_found_reachable(void);
|
void router_orport_found_reachable(void);
|
||||||
void router_dirport_found_reachable(void);
|
void router_dirport_found_reachable(void);
|
||||||
|
@ -381,6 +381,15 @@ static int can_reach_or_port = 0;
|
|||||||
/** Whether we can reach our DirPort from the outside. */
|
/** Whether we can reach our DirPort from the outside. */
|
||||||
static int can_reach_dir_port = 0;
|
static int can_reach_dir_port = 0;
|
||||||
|
|
||||||
|
/** Return 1 if all open ports are known reachable; else return 0. */
|
||||||
|
int check_whether_ports_reachable(void) {
|
||||||
|
if (!can_reach_or_port)
|
||||||
|
return 0;
|
||||||
|
if (get_options()->DirPort && !can_reach_dir_port)
|
||||||
|
return 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
void consider_testing_reachability(void) {
|
void consider_testing_reachability(void) {
|
||||||
routerinfo_t *me = router_get_my_routerinfo();
|
routerinfo_t *me = router_get_my_routerinfo();
|
||||||
|
|
||||||
@ -397,11 +406,17 @@ void consider_testing_reachability(void) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void ports_now_reachable(void) {
|
||||||
|
log_fn(LOG_NOTICE,"Your server is reachable. Publishing server descriptor.");
|
||||||
|
}
|
||||||
|
|
||||||
/** Annotate that we found our ORPort reachable. */
|
/** Annotate that we found our ORPort reachable. */
|
||||||
void router_orport_found_reachable(void) {
|
void router_orport_found_reachable(void) {
|
||||||
if (!can_reach_or_port) {
|
if (!can_reach_or_port) {
|
||||||
log_fn(LOG_NOTICE,"Your ORPort is reachable from the outside. Excellent.");
|
log_fn(LOG_NOTICE,"Your ORPort is reachable from the outside. Excellent.");
|
||||||
can_reach_or_port = 1;
|
can_reach_or_port = 1;
|
||||||
|
if (check_whether_ports_reachable())
|
||||||
|
ports_now_reachable();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -410,6 +425,8 @@ void router_dirport_found_reachable(void) {
|
|||||||
if (!can_reach_dir_port) {
|
if (!can_reach_dir_port) {
|
||||||
log_fn(LOG_NOTICE,"Your DirPort is reachable from the outside. Excellent.");
|
log_fn(LOG_NOTICE,"Your DirPort is reachable from the outside. Excellent.");
|
||||||
can_reach_dir_port = 1;
|
can_reach_dir_port = 1;
|
||||||
|
if (check_whether_ports_reachable())
|
||||||
|
ports_now_reachable();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -474,12 +491,7 @@ static int decide_if_publishable_server(time_t now) {
|
|||||||
if (options->AuthoritativeDir)
|
if (options->AuthoritativeDir)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
if (!can_reach_or_port)
|
return check_whether_ports_reachable();
|
||||||
return 0;
|
|
||||||
if (options->DirPort && !can_reach_dir_port)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void consider_publishable_server(time_t now, int force) {
|
void consider_publishable_server(time_t now, int force) {
|
||||||
|
Loading…
Reference in New Issue
Block a user