aboutsummaryrefslogtreecommitdiff
path: root/src/or/entrynodes.h
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2016-11-14 15:46:09 -0500
committerNick Mathewson <nickm@torproject.org>2016-11-30 14:42:52 -0500
commitdd6def5daf5b0b579a61c9e83cfa905b333f99a1 (patch)
tree0980983ca7bc2fd9b934af832b30e29139d2c495 /src/or/entrynodes.h
parent539eba0a4bab1e22a7e2e19132d356e99c32e232 (diff)
downloadtor-dd6def5daf5b0b579a61c9e83cfa905b333f99a1.tar.gz
tor-dd6def5daf5b0b579a61c9e83cfa905b333f99a1.zip
Initial code to parse/encode/sample prop271 guards
The encoding code is very straightforward. The decoding code is a bit tricky, but clean-ish. The sampling code is untested and probably needs more work.
Diffstat (limited to 'src/or/entrynodes.h')
-rw-r--r--src/or/entrynodes.h14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/or/entrynodes.h b/src/or/entrynodes.h
index 4f39a091f0..5c0857b426 100644
--- a/src/or/entrynodes.h
+++ b/src/or/entrynodes.h
@@ -63,7 +63,7 @@ typedef struct guard_pathbias_t {
* use a node_t, since we want to remember these even when we
* don't have any directory info. */
struct entry_guard_t {
- char nickname[MAX_NICKNAME_LEN+1];
+ char nickname[MAX_HEX_NICKNAME_LEN+1];
char identity[DIGEST_LEN];
ed25519_public_key_t ed_id;
@@ -71,7 +71,7 @@ struct entry_guard_t {
/* Persistent fields, present for all sampled guards. */
time_t sampled_on_date;
- time_t unlisted_since_date;
+ time_t unlisted_since_date; // can be zero
char *sampled_by_version;
unsigned currently_listed : 1;
@@ -93,6 +93,9 @@ struct entry_guard_t {
unsigned is_filtered_guard : 1;
unsigned is_usable_filtered_guard : 1;
+ /** This string holds any fields that we are maintaining because
+ * we saw them in the state, even if we don't understand them. */
+ char *extra_state_fields;
/**
* @name legacy guard selection algorithm fields
*
@@ -152,6 +155,13 @@ const char *entry_guard_describe(const entry_guard_t *guard);
guard_pathbias_t *entry_guard_get_pathbias_state(entry_guard_t *guard);
#ifdef ENTRYNODES_PRIVATE
+STATIC time_t randomize_time(time_t now, time_t max_backdate);
+STATIC void entry_guard_add_to_sample(guard_selection_t *gs,
+ node_t *node);
+STATIC char *entry_guard_encode_for_state(entry_guard_t *guard);
+STATIC entry_guard_t *entry_guard_parse_from_state(const char *s);
+STATIC void entry_guard_free(entry_guard_t *e);
+
STATIC const node_t *add_an_entry_guard(guard_selection_t *gs,
const node_t *chosen,
int reset_status, int prepend,