diff options
-rw-r--r-- | doc/spec/proposals/137-bootstrap-phases.txt | 2 | ||||
-rw-r--r-- | src/or/control.c | 13 | ||||
-rw-r--r-- | src/or/or.h | 5 |
3 files changed, 13 insertions, 7 deletions
diff --git a/doc/spec/proposals/137-bootstrap-phases.txt b/doc/spec/proposals/137-bootstrap-phases.txt index 4be2cd856e..fe67e403e2 100644 --- a/doc/spec/proposals/137-bootstrap-phases.txt +++ b/doc/spec/proposals/137-bootstrap-phases.txt @@ -55,7 +55,7 @@ Status: Open the same order. Some phases might also be skipped (not reported) if the associated bootstrap step is already complete. - Phase 1: + Phase 0: tag=starting summary="starting" Tor starts out in this phase. diff --git a/src/or/control.c b/src/or/control.c index d15676a4be..bb756b4eef 100644 --- a/src/or/control.c +++ b/src/or/control.c @@ -3715,6 +3715,10 @@ bootstrap_status_to_string(bootstrap_status_t s, const char **tag, const char **summary) { switch (s) { + case BOOTSTRAP_STATUS_UNDEF: + *tag = "undef"; + *summary = "Undefined"; + break; case BOOTSTRAP_STATUS_STARTING: *tag = "starting"; *summary = "Starting"; @@ -3782,8 +3786,9 @@ bootstrap_status_to_string(bootstrap_status_t s, const char **tag, /** 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. */ -static int bootstrap_percent = 0; + * ambiguous. It starts at 'undef', but gets set to 'starting' while + * Tor initializes. */ +static int bootstrap_percent = BOOTSTRAP_STATUS_UNDEF; /** How many problems have we had getting to the next bootstrapping phase? * These include failure to establish a connection to a Tor relay, @@ -3807,7 +3812,7 @@ control_event_bootstrap(bootstrap_status_t status, int progress) const char *tag, *summary; char buf[BOOTSTRAP_MSG_LEN]; - if (bootstrap_percent == 100) + if (bootstrap_percent == BOOTSTRAP_STATUS_DONE) return; /* already bootstrapped; nothing to be done here. */ /* special case for handshaking status, since our TLS handshaking code @@ -3860,7 +3865,7 @@ control_event_bootstrap_problem(const char *warn, int reason) if (++bootstrap_problems != BOOTSTRAP_PROBLEM_THRESHOLD) return; /* no worries yet */ - while (bootstrap_status_to_string(status, &tag, &summary) < 0) + while (status>=0 && bootstrap_status_to_string(status, &tag, &summary) < 0) status--; /* find a recognized status string based on current progress */ log_warn(LD_CONTROL, "Problem bootstrapping. Stuck at %d%%: %s. (%s; %s)", diff --git a/src/or/or.h b/src/or/or.h index 5affef5d97..219ea5f4c3 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -3057,9 +3057,10 @@ void enable_control_logging(void); /** Enum describing various stages of bootstrapping, for use with controller * bootstrap status events. The values range from 0 to 100. */ typedef enum { - BOOTSTRAP_STATUS_STARTING=1, + BOOTSTRAP_STATUS_UNDEF=-1, + BOOTSTRAP_STATUS_STARTING=0, BOOTSTRAP_STATUS_CONN_DIR=5, - BOOTSTRAP_STATUS_HANDSHAKE=-1, + BOOTSTRAP_STATUS_HANDSHAKE=-2, BOOTSTRAP_STATUS_HANDSHAKE_DIR=10, BOOTSTRAP_STATUS_ONEHOP_CREATE=15, BOOTSTRAP_STATUS_REQUESTING_STATUS=20, |