aboutsummaryrefslogtreecommitdiff
path: root/src/core/or/circuitpadding_machines.c
diff options
context:
space:
mode:
authorMike Perry <mikeperry-git@torproject.org>2019-05-16 18:41:21 +0000
committerMike Perry <mikeperry-git@torproject.org>2019-05-16 19:21:14 +0000
commitf237fed7466e84e6b6399fe5c7cb80bd59e3e2d8 (patch)
tree8362ca2f24cd9d9389a6c285146384009128f5ea /src/core/or/circuitpadding_machines.c
parent42ea3a416e649eddf4bf9a0dee88a8b4fdbbef20 (diff)
downloadtor-f237fed7466e84e6b6399fe5c7cb80bd59e3e2d8.tar.gz
tor-f237fed7466e84e6b6399fe5c7cb80bd59e3e2d8.zip
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).
Diffstat (limited to 'src/core/or/circuitpadding_machines.c')
-rw-r--r--src/core/or/circuitpadding_machines.c91
1 files changed, 44 insertions, 47 deletions
diff --git a/src/core/or/circuitpadding_machines.c b/src/core/or/circuitpadding_machines.c
index c096822899..4256a7be4a 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);