Commit 1fd0a547 authored by Nick Mathewson's avatar Nick Mathewson 🤹
Browse files

New function to tell the guard module "We're on the net!"

(Call it whenever we read a cell.)
parent 8dc6048c
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -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) {
+8 −0
Original line number Diff line number Diff line
@@ -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
+11 −1
Original line number Diff line number Diff line
@@ -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,