[tor-commits] [tor/master] New function to tell the guard module "We're on the net!"

nickm at torproject.org nickm at torproject.org
Fri Dec 16 16:26:17 UTC 2016


commit 1fd0a547bb6af73cbc32be06ffbf6233eb9050a6
Author: Nick Mathewson <nickm at torproject.org>
Date:   Mon Nov 21 17:14:04 2016 -0500

    New function to tell the guard module "We're on the net!"
    
    (Call it whenever we read a cell.)
---
 src/or/channeltls.c |  9 +++++++++
 src/or/entrynodes.c |  8 ++++++++
 src/or/entrynodes.h | 12 +++++++++++-
 3 files changed, 28 insertions(+), 1 deletion(-)

diff --git a/src/or/channeltls.c b/src/or/channeltls.c
index 9fb309d..02b783a 100644
--- a/src/or/channeltls.c
+++ b/src/or/channeltls.c
@@ -49,6 +49,7 @@
 #include "connection.h"
 #include "connection_or.h"
 #include "control.h"
+#include "entrynodes.h"
 #include "link_handshake.h"
 #include "relay.h"
 #include "rephist.h"
@@ -1095,6 +1096,10 @@ channel_tls_handle_cell(cell_t *cell, or_connection_t *conn)
   if (conn->base_.state == OR_CONN_STATE_OR_HANDSHAKING_V3)
     or_handshake_state_record_cell(conn, conn->handshake_state, cell, 1);
 
+  /* We note that we're on the internet whenever we read a cell. This is
+   * a fast operation. */
+  entry_guards_note_internet_connectivity(get_guard_selection_info());
+
   switch (cell->command) {
     case CELL_PADDING:
       ++stats_n_padding_cells_processed;
@@ -1273,6 +1278,10 @@ channel_tls_handle_var_cell(var_cell_t *var_cell, or_connection_t *conn)
       return;
   }
 
+  /* We note that we're on the internet whenever we read a cell. This is
+   * a fast operation. */
+  entry_guards_note_internet_connectivity(get_guard_selection_info());
+
   /* Now handle the cell */
 
   switch (var_cell->command) {
diff --git a/src/or/entrynodes.c b/src/or/entrynodes.c
index 959b422..4a99897 100644
--- a/src/or/entrynodes.c
+++ b/src/or/entrynodes.c
@@ -1039,6 +1039,14 @@ entry_guard_consider_retry(entry_guard_t *guard)
   }
 }
 
+/** Tell the entry guards subsystem that we have confirmed that as of
+ * just now, we're on the internet. */
+void
+entry_guards_note_internet_connectivity(guard_selection_t *gs)
+{
+  gs->last_time_on_internet = approx_time();
+}
+
 /**
  * Get a guard for use with a circuit.  Prefer to pick a running primary
  * guard; then a non-pending running filtered confirmed guard; then a
diff --git a/src/or/entrynodes.h b/src/or/entrynodes.h
index 5b3aa66..7119d54 100644
--- a/src/or/entrynodes.h
+++ b/src/or/entrynodes.h
@@ -283,6 +283,13 @@ struct circuit_guard_state_t {
 };
 #endif
 
+/* Common entry points for old and new guard code */
+void guards_update_all(void);
+const node_t *guards_choose_guard(cpath_build_state_t *state,
+                                  circuit_guard_state_t **guard_state_out);
+const node_t *guards_choose_dirguard(dirinfo_type_t info,
+                                     circuit_guard_state_t **guard_state_out);
+
 #if 1
 /* XXXX NM I would prefer that all of this stuff be private to
  * entrynodes.c. */
@@ -313,12 +320,15 @@ int entry_guard_pick_for_circuit(guard_selection_t *gs,
                                  circuit_guard_state_t **guard_state_out);
 int entry_guard_succeeded(guard_selection_t *gs,
                           circuit_guard_state_t **guard_state_p);
-int entry_guard_failed(guard_selection_t *gs,
+void entry_guard_failed(guard_selection_t *gs,
                        circuit_guard_state_t **guard_state_p);
+void entry_guard_chan_failed(guard_selection_t *gs,
+                            channel_t *chan);
 void entry_guards_update_all(guard_selection_t *gs);
 int entry_guards_upgrade_waiting_circuits(guard_selection_t *gs,
                                           smartlist_t *all_circuits,
                                           smartlist_t *newly_complete_out);
+void entry_guards_note_internet_connectivity(guard_selection_t *gs);
 
 /* Used by bridges.c only. */
 void add_bridge_as_entry_guard(guard_selection_t *gs,





More information about the tor-commits mailing list