mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 21:23:58 +01:00
r8974@Kushana: nickm | 2006-09-28 17:05:59 -0400
Improvement to last entry guards patch: track when we last attempted to connect to a node in our state file along with how long it has been unreachable. Also clarify behavior of parse_iso_time() when it gets extra characters. svn:r8520
This commit is contained in:
parent
9988112c87
commit
d3a06684bc
@ -910,6 +910,10 @@ format_iso_time(char *buf, time_t t)
|
|||||||
strftime(buf, ISO_TIME_LEN+1, "%Y-%m-%d %H:%M:%S", tor_gmtime_r(&t, &tm));
|
strftime(buf, ISO_TIME_LEN+1, "%Y-%m-%d %H:%M:%S", tor_gmtime_r(&t, &tm));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Given an ISO-formatted UTC time value (after the epoch) in <b>cp</b>,
|
||||||
|
* parse it and store its value in *<b>t</b>. Return 0 on success, -1 on
|
||||||
|
* failure. Ignore extraneous stuff in <b>cp</b> separated by whitespace from
|
||||||
|
* the end of the time string. */
|
||||||
int
|
int
|
||||||
parse_iso_time(const char *cp, time_t *t)
|
parse_iso_time(const char *cp, time_t *t)
|
||||||
{
|
{
|
||||||
|
@ -2275,6 +2275,7 @@ entry_guards_parse_state(or_state_t *state, int set, char **msg)
|
|||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
time_t when;
|
time_t when;
|
||||||
|
time_t last_try = 0;
|
||||||
if (!node) {
|
if (!node) {
|
||||||
*msg = tor_strdup("Unable to parse entry nodes: "
|
*msg = tor_strdup("Unable to parse entry nodes: "
|
||||||
"EntryGuardDownSince/UnlistedSince without EntryGuard");
|
"EntryGuardDownSince/UnlistedSince without EntryGuard");
|
||||||
@ -2285,10 +2286,16 @@ entry_guards_parse_state(or_state_t *state, int set, char **msg)
|
|||||||
"Bad time in EntryGuardDownSince/UnlistedSince");
|
"Bad time in EntryGuardDownSince/UnlistedSince");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (!strcasecmp(line->key, "EntryGuardDownSince"))
|
if (strlen(line->value) >= ISO_TIME_LEN+ISO_TIME_LEN+1) {
|
||||||
|
/* ignore failure */
|
||||||
|
parse_iso_time(line->value+ISO_TIME_LEN+1, &last_try);
|
||||||
|
}
|
||||||
|
if (!strcasecmp(line->key, "EntryGuardDownSince")) {
|
||||||
node->unreachable_since = when;
|
node->unreachable_since = when;
|
||||||
else
|
node->last_attempted = last_try;
|
||||||
|
} else {
|
||||||
node->bad_since = when;
|
node->bad_since = when;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2348,8 +2355,12 @@ entry_guards_update_state(or_state_t *state)
|
|||||||
if (e->unreachable_since) {
|
if (e->unreachable_since) {
|
||||||
*next = line = tor_malloc_zero(sizeof(config_line_t));
|
*next = line = tor_malloc_zero(sizeof(config_line_t));
|
||||||
line->key = tor_strdup("EntryGuardDownSince");
|
line->key = tor_strdup("EntryGuardDownSince");
|
||||||
line->value = tor_malloc(ISO_TIME_LEN+1);
|
line->value = tor_malloc(ISO_TIME_LEN+1+ISO_TIME_LEN+1);
|
||||||
format_iso_time(line->value, e->unreachable_since);
|
format_iso_time(line->value, e->unreachable_since);
|
||||||
|
if (e->last_attempted) {
|
||||||
|
line->value[ISO_TIME_LEN] = ' ';
|
||||||
|
format_iso_time(line->value+ISO_TIME_LEN+1, e->last_attempted);
|
||||||
|
}
|
||||||
next = &(line->next);
|
next = &(line->next);
|
||||||
}
|
}
|
||||||
if (e->bad_since) {
|
if (e->bad_since) {
|
||||||
|
Loading…
Reference in New Issue
Block a user