Tor
0.4.7.0-alpha-dev
|
Provide bootstrap progress events for the control port. More...
#include "core/or/or.h"
#include "app/config/config.h"
#include "core/mainloop/connection.h"
#include "core/or/connection_or.h"
#include "core/or/connection_st.h"
#include "core/or/or_connection_st.h"
#include "core/or/reasons.h"
#include "feature/control/control_events.h"
#include "feature/hibernate/hibernate.h"
#include "lib/malloc/malloc.h"
Go to the source code of this file.
Macros | |
#define | BOOTSTRAP_MSG_LEN 1024 |
#define | N_BOOT_TO_STR (sizeof(boot_to_str_tab)/sizeof(boot_to_str_tab[0])) |
#define | BOOTSTRAP_PROBLEM_THRESHOLD 10 |
#define | BOOTSTRAP_PCT_INCREMENT 5 |
Functions | |
static int | bootstrap_status_to_string (bootstrap_status_t s, const char **tag, const char **summary) |
static void | control_event_bootstrap_core (int loglevel, bootstrap_status_t status, int progress) |
int | control_get_bootstrap_percent (void) |
void | control_event_bootstrap (bootstrap_status_t status, int progress) |
void | control_event_boot_dir (bootstrap_status_t status, int progress) |
void | control_event_boot_first_orconn (void) |
void | control_event_bootstrap_problem (const char *warn, const char *reason, const connection_t *conn, int dowarn) |
void | control_event_bootstrap_prob_or (const char *warn, int reason, or_connection_t *or_conn) |
char * | control_event_boot_last_msg (void) |
void | control_event_bootstrap_reset (void) |
Variables | |
static char | last_sent_bootstrap_message [BOOTSTRAP_MSG_LEN] |
struct { | |
bootstrap_status_t status | |
const char * tag | |
const char * summary | |
} | boot_to_str_tab [] |
static int | bootstrap_percent = BOOTSTRAP_STATUS_UNDEF |
static int | bootstrap_phase = BOOTSTRAP_STATUS_UNDEF |
static int | notice_bootstrap_percent = 0 |
static int | bootstrap_problems = 0 |
static int | bootstrap_first_orconn = 0 |
static int | bootstrap_dir_phase = BOOTSTRAP_STATUS_UNDEF |
static int | bootstrap_dir_progress = BOOTSTRAP_STATUS_UNDEF |
Provide bootstrap progress events for the control port.
Definition in file control_bootstrap.c.
#define BOOTSTRAP_MSG_LEN 1024 |
A sufficiently large size to record the last bootstrap phase string.
Definition at line 22 of file control_bootstrap.c.
#define BOOTSTRAP_PCT_INCREMENT 5 |
When our bootstrapping progress level changes, but our bootstrapping status has not advanced, we only log at NOTICE when we have made at least this much progress.
Definition at line 146 of file control_bootstrap.c.
#define BOOTSTRAP_PROBLEM_THRESHOLD 10 |
We only tell the controller once we've hit a threshold of problems for the current phase.
Definition at line 140 of file control_bootstrap.c.
|
static |
Convert the name of a bootstrapping phase s into strings tag and summary suitable for display by the controller.
Definition at line 99 of file control_bootstrap.c.
void control_event_boot_dir | ( | bootstrap_status_t | status, |
int | progress | ||
) |
Defer directory info bootstrap events until we have successfully completed our first connection to a router.
Definition at line 234 of file control_bootstrap.c.
void control_event_boot_first_orconn | ( | void | ) |
Set a flag to allow reporting of directory bootstrap progress. (Code that reports completion of an OR_CONN calls this.) Also, report directory progress so far.
Definition at line 255 of file control_bootstrap.c.
char* control_event_boot_last_msg | ( | void | ) |
Return a copy of the last sent bootstrap message.
Definition at line 384 of file control_bootstrap.c.
void control_event_bootstrap | ( | bootstrap_status_t | status, |
int | progress | ||
) |
Called when Tor has made progress at bootstrapping its directory information and initial circuits.
status is the new status, that is, what task we will be doing next. progress is zero if we just started this task, else it represents progress on the task.
Definition at line 188 of file control_bootstrap.c.
Referenced by bto_cevent_anyconn(), bto_cevent_apconn(), and control_event_boot_first_orconn().
|
static |
Do the actual logging and notifications for control_event_bootstrap(). Doesn't change any state beyond that.
Definition at line 152 of file control_bootstrap.c.
void control_event_bootstrap_prob_or | ( | const char * | warn, |
int | reason, | ||
or_connection_t * | or_conn | ||
) |
Called when Tor has failed to make bootstrapping progress in a way that indicates a problem. warn gives a hint as to why, and reason provides an "or_conn_end_reason" tag. or_conn is the connection that caused this problem.
Definition at line 347 of file control_bootstrap.c.
void control_event_bootstrap_problem | ( | const char * | warn, |
const char * | reason, | ||
const connection_t * | conn, | ||
int | dowarn | ||
) |
Called when Tor has failed to make bootstrapping progress in a way that indicates a problem. warn gives a human-readable hint as to why, and reason provides a controller-facing short tag. conn is the connection that caused this problem and can be NULL if a connection cannot be easily identified.
Definition at line 268 of file control_bootstrap.c.
void control_event_bootstrap_reset | ( | void | ) |
Reset bootstrap tracking state.
Definition at line 391 of file control_bootstrap.c.
const { ... } boot_to_str_tab[] |
Table to convert bootstrap statuses to strings.
|
static |
Like bootstrap_phase, but for (possibly deferred) directory progress
Definition at line 226 of file control_bootstrap.c.
Referenced by control_event_boot_first_orconn().
|
static |
Like bootstrap_problems, but for (possibly deferred) directory progress
Definition at line 229 of file control_bootstrap.c.
Referenced by control_event_boot_first_orconn().
|
static |
Flag whether we've opened an OR_CONN yet
Definition at line 223 of file control_bootstrap.c.
Referenced by control_event_boot_first_orconn().
|
static |
What percentage through the bootstrap process are we? We remember this so we can avoid sending redundant bootstrap status events, and so we can guess context for the bootstrap messages which are ambiguous. It starts at 'undef', but gets set to 'starting' while Tor initializes.
Definition at line 119 of file control_bootstrap.c.
Referenced by control_event_bootstrap_reset().
|
static |
Like bootstrap_percent, but only takes on the enumerated values in bootstrap_status_t.
Definition at line 124 of file control_bootstrap.c.
|
static |
How many problems have we had getting to the next bootstrapping phase? These include failure to establish a connection to a Tor relay, failures to finish the TLS handshake, failures to validate the consensus document, etc.
Definition at line 136 of file control_bootstrap.c.
|
static |
What was the last bootstrap phase message we sent? We keep track of this so we can respond to getinfo status/bootstrap-phase queries.
Definition at line 26 of file control_bootstrap.c.
|
static |
As bootstrap_percent, but holds the bootstrapping level at which we last logged a NOTICE-level message. We use this, plus BOOTSTRAP_PCT_INCREMENT, to avoid flooding the log with a new message every time we get a few more microdescriptors
Definition at line 130 of file control_bootstrap.c.