mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-13 06:33:44 +01:00
Make can_complete_circuits a static variable.
This commit is contained in:
parent
f15cd22bb7
commit
336c856e52
3
changes/no_global_ccc
Normal file
3
changes/no_global_ccc
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
o Code Simplification and Refactoring:
|
||||||
|
- Stop using can_complete_circuits as a global variable; access it with
|
||||||
|
a function instead.
|
@ -943,9 +943,9 @@ circuit_send_next_onion_skin(origin_circuit_t *circ)
|
|||||||
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 */
|
||||||
|
|
||||||
if (!can_complete_circuit && !circ->build_state->onehop_tunnel) {
|
if (!have_completed_a_circuit() && !circ->build_state->onehop_tunnel) {
|
||||||
const or_options_t *options = get_options();
|
const or_options_t *options = get_options();
|
||||||
can_complete_circuit=1;
|
note_that_we_completed_a_circuit();
|
||||||
/* FFFF Log a count of known routers here */
|
/* FFFF Log a count of known routers here */
|
||||||
log_notice(LD_GENERAL,
|
log_notice(LD_GENERAL,
|
||||||
"Tor has successfully opened a circuit. "
|
"Tor has successfully opened a circuit. "
|
||||||
@ -1033,7 +1033,8 @@ circuit_note_clock_jumped(int seconds_elapsed)
|
|||||||
seconds_elapsed >=0 ? "forward" : "backward");
|
seconds_elapsed >=0 ? "forward" : "backward");
|
||||||
control_event_general_status(LOG_WARN, "CLOCK_JUMPED TIME=%d",
|
control_event_general_status(LOG_WARN, "CLOCK_JUMPED TIME=%d",
|
||||||
seconds_elapsed);
|
seconds_elapsed);
|
||||||
can_complete_circuit=0; /* so it'll log when it works again */
|
/* so we log when it works again */
|
||||||
|
note_that_we_maybe_cant_complete_circuits();
|
||||||
control_event_client_status(severity, "CIRCUIT_NOT_ESTABLISHED REASON=%s",
|
control_event_client_status(severity, "CIRCUIT_NOT_ESTABLISHED REASON=%s",
|
||||||
"CLOCK_JUMPED");
|
"CLOCK_JUMPED");
|
||||||
circuit_mark_all_unused_circs();
|
circuit_mark_all_unused_circs();
|
||||||
|
@ -1072,7 +1072,7 @@ options_act_reversible(const or_options_t *old_options, char **msg)
|
|||||||
"connections.");
|
"connections.");
|
||||||
connection_mark_all_noncontrol_connections();
|
connection_mark_all_noncontrol_connections();
|
||||||
/* We can't complete circuits until the network is re-enabled. */
|
/* We can't complete circuits until the network is re-enabled. */
|
||||||
can_complete_circuit = 0;
|
note_that_we_maybe_cant_complete_circuits();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1670,7 +1670,7 @@ options_act(const or_options_t *old_options)
|
|||||||
|
|
||||||
if (server_mode(options) && !server_mode(old_options)) {
|
if (server_mode(options) && !server_mode(old_options)) {
|
||||||
ip_address_changed(0);
|
ip_address_changed(0);
|
||||||
if (can_complete_circuit || !any_predicted_circuits(time(NULL)))
|
if (have_completed_a_circuit() || !any_predicted_circuits(time(NULL)))
|
||||||
inform_testing_reachability();
|
inform_testing_reachability();
|
||||||
}
|
}
|
||||||
cpuworkers_rotate();
|
cpuworkers_rotate();
|
||||||
|
@ -2015,7 +2015,7 @@ getinfo_helper_events(control_connection_t *control_conn,
|
|||||||
/* Note that status/ is not a catch-all for events; there's only supposed
|
/* Note that status/ is not a catch-all for events; there's only supposed
|
||||||
* to be a status GETINFO if there's a corresponding STATUS event. */
|
* to be a status GETINFO if there's a corresponding STATUS event. */
|
||||||
if (!strcmp(question, "status/circuit-established")) {
|
if (!strcmp(question, "status/circuit-established")) {
|
||||||
*answer = tor_strdup(can_complete_circuit ? "1" : "0");
|
*answer = tor_strdup(have_completed_a_circuit() ? "1" : "0");
|
||||||
} else if (!strcmp(question, "status/enough-dir-info")) {
|
} else if (!strcmp(question, "status/enough-dir-info")) {
|
||||||
*answer = tor_strdup(router_have_minimum_dir_info() ? "1" : "0");
|
*answer = tor_strdup(router_have_minimum_dir_info() ? "1" : "0");
|
||||||
} else if (!strcmp(question, "status/good-server-descriptor") ||
|
} else if (!strcmp(question, "status/good-server-descriptor") ||
|
||||||
|
@ -150,7 +150,7 @@ static int called_loop_once = 0;
|
|||||||
* any longer (a big time jump happened, when we notice our directory is
|
* any longer (a big time jump happened, when we notice our directory is
|
||||||
* heinously out-of-date, etc.
|
* heinously out-of-date, etc.
|
||||||
*/
|
*/
|
||||||
int can_complete_circuit=0;
|
static int can_complete_circuits = 0;
|
||||||
|
|
||||||
/** How often do we check for router descriptors that we should download
|
/** How often do we check for router descriptors that we should download
|
||||||
* when we have too little directory info? */
|
* when we have too little directory info? */
|
||||||
@ -223,6 +223,32 @@ set_buffer_lengths_to_zero(tor_socket_t s)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/** Return 1 if we have successfully built a circuit, and nothing has changed
|
||||||
|
* to make us think that maybe we can't.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
have_completed_a_circuit(void)
|
||||||
|
{
|
||||||
|
return can_complete_circuits;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Note that we have successfully built a circuit, so that reachability
|
||||||
|
* testing and introduction points and so on may be attempted. */
|
||||||
|
void
|
||||||
|
note_that_we_completed_a_circuit(void)
|
||||||
|
{
|
||||||
|
can_complete_circuits = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Note that something has happened (like a clock jump, or DisableNetwork) to
|
||||||
|
* make us think that maybe we can't complete circuits. */
|
||||||
|
void
|
||||||
|
note_that_we_maybe_cant_complete_circuits(void)
|
||||||
|
{
|
||||||
|
can_complete_circuits = 0;
|
||||||
|
}
|
||||||
|
|
||||||
/** Add <b>conn</b> to the array of connections that we can poll on. The
|
/** Add <b>conn</b> to the array of connections that we can poll on. The
|
||||||
* connection's socket must be set; the connection starts out
|
* connection's socket must be set; the connection starts out
|
||||||
* non-reading and non-writing.
|
* non-reading and non-writing.
|
||||||
@ -999,7 +1025,7 @@ directory_info_has_arrived(time_t now, int from_cache)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (server_mode(options) && !net_is_disabled() && !from_cache &&
|
if (server_mode(options) && !net_is_disabled() && !from_cache &&
|
||||||
(can_complete_circuit || !any_predicted_circuits(now)))
|
(have_completed_a_circuit() || !any_predicted_circuits(now)))
|
||||||
consider_testing_reachability(1, 1);
|
consider_testing_reachability(1, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1436,7 +1462,7 @@ run_scheduled_events(time_t now)
|
|||||||
/* also, check religiously for reachability, if it's within the first
|
/* also, check religiously for reachability, if it's within the first
|
||||||
* 20 minutes of our uptime. */
|
* 20 minutes of our uptime. */
|
||||||
if (is_server &&
|
if (is_server &&
|
||||||
(can_complete_circuit || !any_predicted_circuits(now)) &&
|
(have_completed_a_circuit() || !any_predicted_circuits(now)) &&
|
||||||
!we_are_hibernating()) {
|
!we_are_hibernating()) {
|
||||||
if (stats_n_seconds_working < TIMEOUT_UNTIL_UNREACHABILITY_COMPLAINT) {
|
if (stats_n_seconds_working < TIMEOUT_UNTIL_UNREACHABILITY_COMPLAINT) {
|
||||||
consider_testing_reachability(1, dirport_reachability_count==0);
|
consider_testing_reachability(1, dirport_reachability_count==0);
|
||||||
@ -1549,7 +1575,7 @@ run_scheduled_events(time_t now)
|
|||||||
circuit_close_all_marked();
|
circuit_close_all_marked();
|
||||||
|
|
||||||
/* 7. And upload service descriptors if necessary. */
|
/* 7. And upload service descriptors if necessary. */
|
||||||
if (can_complete_circuit && !net_is_disabled()) {
|
if (have_completed_a_circuit() && !net_is_disabled()) {
|
||||||
rend_consider_services_upload(now);
|
rend_consider_services_upload(now);
|
||||||
rend_consider_descriptor_republication();
|
rend_consider_descriptor_republication();
|
||||||
}
|
}
|
||||||
@ -1680,7 +1706,7 @@ second_elapsed_callback(periodic_timer_t *timer, void *arg)
|
|||||||
if (server_mode(options) &&
|
if (server_mode(options) &&
|
||||||
!net_is_disabled() &&
|
!net_is_disabled() &&
|
||||||
seconds_elapsed > 0 &&
|
seconds_elapsed > 0 &&
|
||||||
can_complete_circuit &&
|
have_completed_a_circuit() &&
|
||||||
stats_n_seconds_working / TIMEOUT_UNTIL_UNREACHABILITY_COMPLAINT !=
|
stats_n_seconds_working / TIMEOUT_UNTIL_UNREACHABILITY_COMPLAINT !=
|
||||||
(stats_n_seconds_working+seconds_elapsed) /
|
(stats_n_seconds_working+seconds_elapsed) /
|
||||||
TIMEOUT_UNTIL_UNREACHABILITY_COMPLAINT) {
|
TIMEOUT_UNTIL_UNREACHABILITY_COMPLAINT) {
|
||||||
|
@ -12,7 +12,9 @@
|
|||||||
#ifndef TOR_MAIN_H
|
#ifndef TOR_MAIN_H
|
||||||
#define TOR_MAIN_H
|
#define TOR_MAIN_H
|
||||||
|
|
||||||
extern int can_complete_circuit;
|
int have_completed_a_circuit(void);
|
||||||
|
void note_that_we_completed_a_circuit(void);
|
||||||
|
void note_that_we_maybe_cant_complete_circuits(void);
|
||||||
|
|
||||||
int connection_add_impl(connection_t *conn, int is_connecting);
|
int connection_add_impl(connection_t *conn, int is_connecting);
|
||||||
#define connection_add(conn) connection_add_impl((conn), 0)
|
#define connection_add(conn) connection_add_impl((conn), 0)
|
||||||
|
@ -1562,7 +1562,7 @@ update_router_have_minimum_dir_info(void)
|
|||||||
* is back up and usable, and b) disable some activities that Tor
|
* is back up and usable, and b) disable some activities that Tor
|
||||||
* should only do while circuits are working, like reachability tests
|
* should only do while circuits are working, like reachability tests
|
||||||
* and fetching bridge descriptors only over circuits. */
|
* and fetching bridge descriptors only over circuits. */
|
||||||
can_complete_circuit = 0;
|
note_that_we_maybe_cant_complete_circuits();
|
||||||
|
|
||||||
control_event_client_status(LOG_NOTICE, "NOT_ENOUGH_DIR_INFO");
|
control_event_client_status(LOG_NOTICE, "NOT_ENOUGH_DIR_INFO");
|
||||||
}
|
}
|
||||||
|
@ -3075,7 +3075,7 @@ rend_services_introduce(void)
|
|||||||
* an intro point to. */
|
* an intro point to. */
|
||||||
smartlist_t *exclude_nodes = smartlist_new();
|
smartlist_t *exclude_nodes = smartlist_new();
|
||||||
|
|
||||||
if (!can_complete_circuit)
|
if (!have_completed_a_circuit())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
now = time(NULL);
|
now = time(NULL);
|
||||||
|
Loading…
Reference in New Issue
Block a user