aboutsummaryrefslogtreecommitdiff
path: root/crates/tor-proto/src
Commit message (Collapse)AuthorAgeFilesLines
...
| * proto: Fix ConfluxStatus docs post-refactoring.Gabriela Moldovan2025-09-041-1/+1
| |
| * proto: Apply deferred fmt.Gabriela Moldovan2025-09-041-1/+1
| |
| * proto: Group the conflux imports.Gabriela Moldovan2025-09-041-6/+2
| |
| * proto: Use ConfluxCmd instead of CircuitCmd.Gabriela Moldovan2025-09-045-52/+58
| | | | | | | | | | | | This enables us to make the conflux handler logic implementation-agnostic (we want to avoid using `CircuitCmd` here, because it is specific to client circuits).
| * proto: Move abstract conflux handlers outside of the client module.Gabriela Moldovan2025-09-047-650/+657
| | | | | | | | | | | | | | | | | | | | This moves the shared types under `tor_proto::conflux`. Note: the shared types currently import `CircuitCmd` from `client`. A future commit will change the signature of `handle_msg` to return something other than `CircuitCmd` (this will also improve readability, because in reality, that function can never return most `CircuitCmd` variants).
| * proto: Move cmd_counts_towards_seqno to a new conflux module.Gabriela Moldovan2025-09-044-56/+64
| | | | | | | | | | | | | | `tor_proto::conflux` is where the shared conflux logic will live. Soon the generic parts of the conflux handlers will be moved there (whereas the client-specific `AbstractConfluxMsgHandler` impl will continue living under `tor_proto::client`).
| * proto: Make the ConfluxMsgHandler constructor take an abstract handler.Gabriela Moldovan2025-09-043-23/+17
| | | | | | | | | | | | This will enable us to pull `ConfluxMsgHandler` outside of the `client` module (this is needed because relays are meant to use this type as well, but with a different `AbstractMsgHandler`)
* | Merge branch 'sink_blocker' into 'main'Nick Mathewson2025-09-044-0/+541
|\ \ | |/ |/| | | | | proto: Define a new composable SinkBlocker type. See merge request tpo/core/arti!3228
| * proto: Define a new composable SinkBlocker type.Nick Mathewson2025-09-044-0/+541
| | | | | | | | | | | | | | | | This type wraps a futures::Sink, and allows it to be temporarily blocked and unblocked. I'm going to use this to implement padding-based circuit blocking, according to the designs in !3225.
* | proto: Add test ensuring consecutive SWITCHes trigger tunnel teardown.Gabriela Moldovan2025-09-041-0/+48
| |
* | proto: Only send the bad test cell on one of the circuit legs.Gabriela Moldovan2025-09-041-7/+4
| | | | | | | | | | | | | | | | | | This makes it clearer that the tunnel shutdown is triggered correctly (i.e. that it is enough for *one* of the legs to receive the bad SWITCH cell). This also updates a comment that wrongly suggests that the tunnel is only shut down if both legs get removed from the conflux set.
* | proto: Pass the cc params as an argument to setup_good_conflux_tunnel.Gabriela Moldovan2025-09-041-12/+13
| | | | | | | | | | | | | | The test code now creates the params (which enables it to build test cases that use various params). Resolves a TODO.
* | proto: Add another test for SWITCH seqno validation.Gabriela Moldovan2025-09-041-8/+7
| |
* | proto: Update docs to clarify how we validate SWITCH seqnos.Gabriela Moldovan2025-09-041-8/+6
| | | | | | | | Also removes all the TODOs related to #2031 (which is now addressed).
* | proto: Close tunnel if a leg receives consecutive SWITCH cells.Gabriela Moldovan2025-09-041-0/+14
| | | | | | | | Closes #2031
* | proto: Ensure the seqno of the first SWITCH doesn't exceed the init cwnd.Gabriela Moldovan2025-09-041-0/+17
| | | | | | | | This partially addresses #2031
* | proto: Store the seqno of last cell delivered in the client conflux handler.Gabriela Moldovan2025-09-042-0/+12
| | | | | | | | | | | | This will be needed for the SWITCH seqno validation logic. Part of #2031
* | proto: Pass the cwnd params to the conflux message handler.Gabriela Moldovan2025-09-043-2/+50
| | | | | | | | | | | | These will be used for validating SWITCH cells. Part of #2031
* | proto: Pass owned CongestionWindowParams to CongestionControl::new.Gabriela Moldovan2025-09-043-3/+4
| | | | | | | | | | | | | | We no longer need to clone `CongestionWindowParams` now that it implements `Copy`. Resolves a clippy warning.
* | proto: Derive Copy for CongestionWindowParams.Gabriela Moldovan2025-09-041-1/+1
| | | | | | | | | | These will likely always just be a collection of integers (lightweight to copy).
* | Merge branch 'maybenot-triggers' into 'main'Nick Mathewson2025-09-0310-136/+373
|\ \ | | | | | | | | | | | | Circuit padding: note when cells are sent and received See merge request tpo/core/arti!3222
| * | Whoops; let chains _still_ aren't stable in 1.85.Nick Mathewson2025-09-031-2/+1
| | |
| * | padding: Fix compilation with padding disabled.Nick Mathewson2025-09-031-1/+16
| | |
| * | padding cleanup: use QueuedCellPaddingInfo one more place.Nick Mathewson2025-09-031-5/+3
| | |
| * | padding: Report when we have received padding or data.Nick Mathewson2025-09-022-1/+8
| | | | | | | | | | | | (This was so much easier than reporting on the send side.)
| * | padding: Report when outbound cells are flushed.Nick Mathewson2025-09-022-3/+22
| | | | | | | | | | | | | | | | | | (This is what required us to stick a padding controller handle in each CircEnt, and what required us to accompany each queued cell with a QueuedPaddingCellInfo. Ouch!)
| * | padding: Give CircEnt in a Channel a handle for the PaddingController.Nick Mathewson2025-09-027-99/+169
| | | | | | | | | | | | | | | This requires some annoying plumbing to make sure that the right types wind up in the right places.
| * | proto: Turn CircEnt variants into struct-like format.Nick Mathewson2025-09-022-29/+72
| | | | | | | | | | | | (I'm about to add more fields.)
| * | padding: Install a PaddingController in each circuit.Nick Mathewson2025-09-023-5/+16
| | | | | | | | | | | | Also, use it to report that we have queued normal data.
| * | padding: track which hop each queued cell is for.Nick Mathewson2025-09-026-31/+106
| | | | | | | | | | | | | | | | | | | | | | | | We'll need this so that we can tell the right padding machine(s) which of them just had a queue flush. This is not yet 100% done; the unfinished parts are marked with XXXXs.
* | | tor-proto: fix bug in `congestion_signals`Steven Engler2025-09-031-1/+3
| |/ |/|
* | Merge branch 'maybenot-backend' into 'main'Nick Mathewson2025-09-025-0/+1350
|\| | | | | | | | | Define and implement a backend padding API, based on maybenot. See merge request tpo/core/arti!3185
| * padding: document when we set next_scheduled_wakeupNick Mathewson2025-09-021-0/+3
| |
| * padding: Call hops "target" rather than "final" for clarityNick Mathewson2025-09-021-4/+6
| |
| * padding: s/can_bypass/is_bypassable/ for clarity.Nick Mathewson2025-09-022-10/+11
| |
| * padding: Clarify next_expiration vs next_scheduled_wakeupNick Mathewson2025-09-021-4/+9
| |
| * padding: Several comment/style fixes from @gabi-250Nick Mathewson2025-09-024-8/+11
| |
| * Define and implement a backend padding API, based on maybenot.Nick Mathewson2025-09-025-0/+1336
| | | | | | | | | | | | | | | | There are incomplete pieces, marked with "TODO circpad". There is no integration into the circuit reactor code yet. Part of #63
* | Merge branch 'chan-handshake-refactor' into 'main'David Goulet2025-09-021-121/+262
|\ \ | |/ |/| | | | | proto: Refactor channel handshake code for upcoming relay handshake See merge request tpo/core/arti!3182
| * proto: Move is_authenticating() into the base initiator handshake traitDavid Goulet2025-09-021-7/+10
| | | | | | | | | | | | | | | | Initiator always know if they will authenticate or not. Responder is different as a relay doesn't know until the end of the handshake if it is responding to a relay or a client. Signed-off-by: David Goulet <[email protected]>
| * proto: Various channel handshake fixesDavid Goulet2025-09-021-21/+38
| | | | | | | | | | | | | | | | | | | | These are following the review of MR 3182. They are put in a single commit because the git absorb has a large amount of conflicts on rebase and this commit allows the reviewers to see what happened. The base branch was rebased on main due to the need for 3184. Signed-off-by: David Goulet <[email protected]>
| * proto: Fix unit tests after changesDavid Goulet2025-09-021-5/+5
| | | | | | | | Signed-off-by: David Goulet <[email protected]>
| * proto: Add a helper to calculate the handshake clock skewDavid Goulet2025-09-021-12/+33
| | | | | | | | | | | | In the spirit of avoidin code duplication. Signed-off-by: David Goulet <[email protected]>
| * proto: Add a channel initiator handshake base traitDavid Goulet2025-09-021-76/+118
| | | | | | | | | | | | | | | | | | All initiator handshake will implement this in order to get access to the helper function to receive the relay responder cells. Relay will implement this in future commits. Signed-off-by: David Goulet <[email protected]>
| * proto: Introduce a ChannelBaseHandshake traitDavid Goulet2025-09-021-37/+96
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Client and relay handhsake share a lot of code because they both send/recv the same cells, just handles them differently for verification. This is the base trait for all handshake implementing basic getters and VERSIONS cell handling. This will allow the RelayInitiatorHandshake and RelayResponderHandshake to use this common code. See, traits are fun. Win-win-win. Signed-off-by: David Goulet <[email protected]>
| * proto: Put in a ChannelFrame<T> into the client handshakeDavid Goulet2025-09-021-10/+9
| | | | | | | | | | | | | | | | | | | | | | | | The ClientInitiatorHandshake holds a "tls" sink but the very first thing we do is transform it to a ChannelFrame<T>. Instead, just store the frame to the object directly so we can then use a channel frame uniformily accross its lifetime. This will be useful for the future refactoring paving the way for relay channel authentication. Signed-off-by: David Goulet <[email protected]>
* | tor-proto: Switched to "assert in const" patternhashcatHitman2025-09-011-2/+1
|/ | | | | | | Replaced use of [`static_assertions::const_assert`] with the newly available "assert in const" pattern. Signed-off-by: hashcatHitman <[email protected]>
* proto: Use allow(unused) instead of expect(unused).Gabriela Moldovan2025-08-291-1/+1
| | | | | | | | | | | With rustc 1.85, this `expect(unused)` triggers a "lint expectation unfulfilled" error, because rust thinks the struct *is* used (because of the d-d `TryFrom` implementation), despite the fact that it's never actually constructed. This isn't a problem on newer versions (it's correctly identified as unused/dead code on 1.89, for example). Using `allow` instead of `expect` is slightly less nice, but it makes `clippy` pass on 1.85 too.
* proto: Move TunnelId to a separate, shared module (fmt).Gabriela Moldovan2025-08-286-6/+6
|
* proto: Move TunnelId to a separate, shared module.Gabriela Moldovan2025-08-2810-58/+65
| | | | | | | | | | | | | The `TunnelId*` types will be reused in the relay reactor (exit relays need to have the concept of a "tunnel ID" because of conflux). Now the `relay::reactor` module only has a single import from `client` (for the `unwrap_or_shutdown` helper, which we should be able to remove soon). From now, we will avoid importing anything from `client` in the `relay` module, and instead prefer refactoring the code as needed (to pull the implementation-agnostic parts outside of `client`). This commit has no functional changes, just code motion.