[tor-commits] [tor/master] Refactor intro machines, stage 1/2: Move state transition code.

nickm at torproject.org nickm at torproject.org
Fri May 17 12:23:09 UTC 2019


commit f237fed7466e84e6b6399fe5c7cb80bd59e3e2d8
Author: Mike Perry <mikeperry-git at torproject.org>
Date:   Thu May 16 18:41:21 2019 +0000

    Refactor intro machines, stage 1/2: Move state transition code.
    
    This just moves the state transition directives into the proper client/relay
    side functions. It also allows us to remove some dead-code from the client
    side (since the client doesn't send padding).
---
 src/core/or/circuitpadding_machines.c | 91 +++++++++++++++++------------------
 1 file changed, 44 insertions(+), 47 deletions(-)

diff --git a/src/core/or/circuitpadding_machines.c b/src/core/or/circuitpadding_machines.c
index c09682289..4256a7be4 100644
--- a/src/core/or/circuitpadding_machines.c
+++ b/src/core/or/circuitpadding_machines.c
@@ -57,49 +57,6 @@
 #include "core/or/circuitpadding_machines.h"
 #include "core/or/circuitpadding.h"
 
-/* Setup the simple state machine we use for all HS padding machines */
-static void
-setup_state_machine_for_hiding_intro_circuits(circpad_machine_spec_t *machine)
-{
-  /* Two states: START, OBFUSCATE_CIRC_SETUP (and END) */
-  circpad_machine_states_init(machine, 2);
-
-  /* For the relay-side machine, we want to transition
-   * START -> OBFUSCATE_CIRC_SETUP upon first non-padding
-   * cell sent (PADDING_NEGOTIATED in this case).
-   *
-   * For the origin-side machine, we transition to OBFUSCATE_CIRC_SETUP after
-   * sending PADDING_NEGOTIATE, and we stay there (without sending any padding)
-   * until we receive a STOP from the other side. */
-  machine->states[CIRCPAD_STATE_START].
-    next_state[CIRCPAD_EVENT_NONPADDING_SENT] =
-    CIRCPAD_STATE_OBFUSCATE_CIRC_SETUP;
-
-  /* For the relay-side, we want to transition from OBFUSCATE_CIRC_SETUP to END
-   * state when the length finishes.
-   *
-   * For the origin-side, we don't care because the relay-side machine is gonna
-   * END us. */
-  machine->states[CIRCPAD_STATE_OBFUSCATE_CIRC_SETUP].
-      next_state[CIRCPAD_EVENT_LENGTH_COUNT] = CIRCPAD_STATE_END;
-
-  /* Now let's define the OBF -> OBF transitions that maintain our padding
-   * flow:
-   *
-   * For the relay-side machine, we want to keep on sending padding bytes even
-   * when nothing else happens on this circuit. */
-  machine->states[CIRCPAD_STATE_OBFUSCATE_CIRC_SETUP].
-    next_state[CIRCPAD_EVENT_PADDING_SENT] =
-    CIRCPAD_STATE_OBFUSCATE_CIRC_SETUP;
-  /* For the relay-side machine, we need this transition so that we re-enter
-     the state, after PADDING_NEGOTIATED is sent. Otherwise, the remove token
-     function will disable the timer, and nothing will restart it since there
-     is no other motion on an intro circuit. */
-  machine->states[CIRCPAD_STATE_OBFUSCATE_CIRC_SETUP].
-    next_state[CIRCPAD_EVENT_NONPADDING_SENT] =
-    CIRCPAD_STATE_OBFUSCATE_CIRC_SETUP;
-}
-
 /* Setup the OBFUSCATE_CIRC_SETUP state of the machine that hides client-side
  * intro circuits. */
 static void
@@ -202,8 +159,19 @@ circpad_machine_client_hide_intro_circuits(smartlist_t *machines_sl)
   client_machine->allowed_padding_count = INTRO_MACHINE_MAXIMUM_PADDING;
   client_machine->max_padding_percent = 1;
 
-  /* Setup states and histograms */
-  setup_state_machine_for_hiding_intro_circuits(client_machine);
+  /* Two states: START, OBFUSCATE_CIRC_SETUP (and END) */
+  circpad_machine_states_init(client_machine, 2);
+
+  /* For the origin-side machine, we transition to OBFUSCATE_CIRC_SETUP after
+   * sending PADDING_NEGOTIATE, and we stay there (without sending any padding)
+   * until we receive a STOP from the other side. */
+  client_machine->states[CIRCPAD_STATE_START].
+    next_state[CIRCPAD_EVENT_NONPADDING_SENT] =
+    CIRCPAD_STATE_OBFUSCATE_CIRC_SETUP;
+
+  /* origin-side machine has no event reactions while in
+   * CIRCPAD_STATE_OBFUSCATE_CIRC_SETUP, so no more state transitions here). */
+
   setup_obf_state_for_hiding_intro_circuits(
                    &client_machine->states[CIRCPAD_STATE_OBFUSCATE_CIRC_SETUP],
                    true);
@@ -243,8 +211,37 @@ circpad_machine_relay_hide_intro_circuits(smartlist_t *machines_sl)
   relay_machine->allowed_padding_count = INTRO_MACHINE_MAXIMUM_PADDING;
   relay_machine->max_padding_percent = 1;
 
-  /* Setup states and histograms */
-  setup_state_machine_for_hiding_intro_circuits(relay_machine);
+  /* Two states: START, OBFUSCATE_CIRC_SETUP (and END) */
+  circpad_machine_states_init(relay_machine, 2);
+
+  /* For the relay-side machine, we want to transition
+   * START -> OBFUSCATE_CIRC_SETUP upon first non-padding
+   * cell sent (PADDING_NEGOTIATED in this case).  */
+  relay_machine->states[CIRCPAD_STATE_START].
+    next_state[CIRCPAD_EVENT_NONPADDING_SENT] =
+    CIRCPAD_STATE_OBFUSCATE_CIRC_SETUP;
+
+  /* For the relay-side, we want to transition from OBFUSCATE_CIRC_SETUP to END
+   * state when the length finishes. */
+  relay_machine->states[CIRCPAD_STATE_OBFUSCATE_CIRC_SETUP].
+      next_state[CIRCPAD_EVENT_LENGTH_COUNT] = CIRCPAD_STATE_END;
+
+  /* Now let's define the OBF -> OBF transitions that maintain our padding
+   * flow:
+   *
+   * For the relay-side machine, we want to keep on sending padding bytes even
+   * when nothing else happens on this circuit. */
+  relay_machine->states[CIRCPAD_STATE_OBFUSCATE_CIRC_SETUP].
+    next_state[CIRCPAD_EVENT_PADDING_SENT] =
+    CIRCPAD_STATE_OBFUSCATE_CIRC_SETUP;
+  /* For the relay-side machine, we need this transition so that we re-enter
+     the state, after PADDING_NEGOTIATED is sent. Otherwise, the remove token
+     function will disable the timer, and nothing will restart it since there
+     is no other motion on an intro circuit. */
+  relay_machine->states[CIRCPAD_STATE_OBFUSCATE_CIRC_SETUP].
+    next_state[CIRCPAD_EVENT_NONPADDING_SENT] =
+    CIRCPAD_STATE_OBFUSCATE_CIRC_SETUP;
+
   setup_obf_state_for_hiding_intro_circuits(
                  &relay_machine->states[CIRCPAD_STATE_OBFUSCATE_CIRC_SETUP],
                  false);





More information about the tor-commits mailing list