]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Reinstate support for GUARD NEW/UP/DOWN control port events.
authorGeorge Kadianakis <desnacked@riseup.net>
Wed, 17 Jun 2020 10:48:33 +0000 (13:48 +0300)
committerGeorge Kadianakis <desnacked@riseup.net>
Tue, 23 Jun 2020 16:48:37 +0000 (19:48 +0300)
changes/bug40001 [new file with mode: 0644]
src/feature/client/entrynodes.c

diff --git a/changes/bug40001 b/changes/bug40001
new file mode 100644 (file)
index 0000000..0e3f454
--- /dev/null
@@ -0,0 +1,3 @@
+  o Minor features (entry guards):
+    - Reinstate support for GUARD NEW/UP/DOWN control port events.
+      Closes ticket 40001.
\ No newline at end of file
index 2a000a47b69c0d4ab20d2c82e8a845fcbd504f4f..223815e7b2b8206caa35c292504f80e75b166d14 100644 (file)
@@ -906,6 +906,11 @@ entry_guard_add_to_sample_impl(guard_selection_t *gs,
   guard->in_selection = gs;
   entry_guard_set_filtered_flags(get_options(), gs, guard);
   entry_guards_changed_for_guard_selection(gs);
+
+  /* Just added this guard to the sampled set and hence it might be used as a
+   * guard in the future: send GUARD NEW control event. */
+  control_event_guard(guard->nickname, guard->identity, "NEW");
+
   return guard;
 }
 
@@ -2259,6 +2264,9 @@ entry_guards_note_guard_failure(guard_selection_t *gs,
   if (guard->failing_since == 0)
     guard->failing_since = approx_time();
 
+  /* This guard not reachable: send GUARD DOWN event */
+  control_event_guard(guard->nickname, guard->identity, "DOWN");
+
   log_info(LD_GUARD, "Recorded failure for %s%sguard %s",
            guard->is_primary?"primary ":"",
            guard->confirmed_idx>=0?"confirmed ":"",
@@ -2284,6 +2292,11 @@ entry_guards_note_guard_success(guard_selection_t *gs,
   const time_t last_time_on_internet = gs->last_time_on_internet;
   gs->last_time_on_internet = approx_time();
 
+  /* If guard was not already marked as reachable, send a GUARD UP signal */
+  if (guard->is_reachable != GUARD_REACHABLE_YES) {
+    control_event_guard(guard->nickname, guard->identity, "UP");
+  }
+
   guard->is_reachable = GUARD_REACHABLE_YES;
   guard->failing_since = 0;
   guard->is_pending = 0;