aboutsummaryrefslogtreecommitdiff
path: root/crates/tor-proto/src
Commit message (Collapse)AuthorAgeFilesLines
...
* | proto: Add docs to various conflux test structures.Gabriela Moldovan2025-06-271-0/+19
|/ | | | | I am about to add more fields to these, so I'm documenting the existing ones so we don't get confused about what they represent.
* tor-proto: Renamed `DataReaderState::Ready` to `Open`Steven Engler2025-06-261-9/+12
|
* tor-proto: improve documentation for `StreamTarget::send_sendme`Steven Engler2025-06-261-1/+7
|
* tor-proto: log warning for SENDME reactor errorSteven Engler2025-06-261-5/+10
|
* tor-proto: remove unneeded `DataReaderState::ReadingCell` stateSteven Engler2025-06-261-10/+6
| | | | | Now that we no longer need to store a future, there's no need for this state since we're never pending waiting for a future to complete.
* tor-proto: rework `StreamReceiver` into a `futures::Stream`Steven Engler2025-06-263-75/+121
| | | | | | | | | | | Having this be a `futures::Stream` makes it nicer to work with. For example we are able to remove a boxed future from `DataReaderState`, which should be better for performance and makes the code simpler. As mentioned in a previous commit when this type was named `StreamReader`, this type is public in the API, but is not actually accessible. As far as I can tell there is no way to construct it or access it.
* Make `StreamTarget::send_sendme` non-asyncSteven Engler2025-06-263-33/+24
| | | | | | | | | | | | | | | | | | | | | | | | There are some pros/cons to this change: Pros: 1. The only remaining `await` in `StreamReceiver::recv` is for polling the receiver, which means we can turn the `StreamReceiver` into a `Stream` in a future commit. 2. We won't block the user from receiving messages while we wait for the circuit reactor to receive our SENDME message and send it on the outgoing channel. 3. The `StreamReceiver` doesn't really care if it can't send the SENDME. There isn't anything it can do, the circuit hop can go away for external reasons like a DESTROY message, and we still want to return all queued messages to the user anyways. Cons: 1. If the `StreamReceiver` sends a SENDME request to the circuit reactor, and the circuit reactor fails to send the SENDME, there's no good way for the reactor to communicate this back to the `StreamReceiver`.
* tor-proto: rename `StreamReader` to `StreamReceiver`Steven Engler2025-06-266-35/+40
| | | | | | | | | | | | | In rust, the typical nomenclature is to use "receiver" for channels, and "reader" for byte streams. For example `mpsc::Receiver` for something that returns objects and `AsyncRead` for something that reads bytes. Since we also have a `DataReader` for reading bytes, I think renaming this from `StreamReader` to `StreamReceiver` better describes what it is (it's not a "reader" in the typical `Read`/`AsyncRead` sense). This type is public in the API, but is not actually accessible. As far as I can tell there is no way to construct it or access it.
* proto: Remove unused function from ConfluxSetDavid Goulet2025-06-261-5/+0
| | | | Signed-off-by: David Goulet <[email protected]>
* hsservice: Stop using HopNum and use TargetHopDavid Goulet2025-06-265-27/+38
| | | | | | | | | | | This requires some changes to the tor-proto crate to handle the inbound TargetHop from the HS subsystem and then resolve it into a HopNum for a single circuit. It is expected that this will change again with Conflux to only use HopLocation internally in a Tunnel and then use HopNum into a Circuit. Signed-off-by: David Goulet <[email protected]>
* proto: Make send_raw_msg() use a TargetHopDavid Goulet2025-06-262-15/+23
| | | | | | | | | | | | | | | In order for this to work, a last_target_hop() function is added to ClientCirc in order to return a precise hop location as a TargetHop of the last hop. This is needed because in the HS subsystem, we need such value in order to get a location on the last physical hop before adding the virtual hop. The RDV1 cell is sent to that last target hop while the allow_stream_request() is done on the virtual target hop. Signed-off-by: David Goulet <[email protected]>
* hs: Remove the use of HopNum and instead use TargetHopDavid Goulet2025-06-267-12/+51
| | | | | | | | | | This is in the spirit of making everything going inbound the tor-proto crate to use a TargetHop. This becomes much easier for the HS subsystem as it only uses the last hop for its conversation and setup. Signed-off-by: David Goulet <[email protected]>
* proto: Add From<(UniqId, HopNum)> for TargetHopDavid Goulet2025-06-261-0/+6
| | | | | | | | | | Quick helper as within the tor-proto crate, we sometimes have to quickly get a TargetHop. This will come handy with the message handler used by the Conversation object that the HS subsystem uses. Signed-off-by: David Goulet <[email protected]>
* proto: Add a control command to get the binding keyDavid Goulet2025-06-262-15/+39
| | | | | | | | | | | | | This allows us to use TargetHop instead of HopNum but also to get one step closer to not depend on a mutable state. We prefer resolving a TargetHop within the Reactor object in order to use the circuit list instead of the MutableState path. The HS service subsystem is modified to use this modified function that is now async and uses a TargetHop. Signed-off-by: David Goulet <[email protected]>
* proto: Make TargetHop and HopLocation publicDavid Goulet2025-06-262-7/+5
| | | | | | | | | | | | | | | | | This is about to be used outside of tor-proto. It is part of the work to remove the use of HopNum outside tor-proto. The rules are: - Inbound requsest to the tor-proto crate, TargetHop must always be used. - Within tor-proto, TargetHop is resolved into a HopLocation which is more precise and based on the tunnel circuit(s). This is another piece that Conflux will require considering that a Tunnel might have multiple circuits in the future. Signed-off-by: David Goulet <[email protected]>
* proto: Add helper function to resolve TargetHopDavid Goulet2025-06-261-0/+13
| | | | | | | | | | | The Reactor has two functions to resolve both TargetHop into a HopLocation and then a HopLocation into a (UniqId, HopNum). This commit simply adds a helper that does both but returns an Option instead of a Result as it will be used by the reactor command handler and more in future conflux commits. Signed-off-by: David Goulet <[email protected]>
* Merge branch 'notify' into 'main'opara2025-06-252-0/+186
|\ | | | | | | | | tor-proto: Add `Notify{Sender,Receiver}` channel See merge request tpo/core/arti!3066
| * tor-proto: add `Notify{Sender,Receiver}` channelSteven Engler2025-06-232-0/+186
| | | | | | | | | | | | An async notification channel. This uses `postage::watch::{Sender,Receiver}` internally.
* | Merge branch 'mockable-time' into 'main'David Goulet2025-06-253-7/+20
|\ \ | | | | | | | | | | | | tor-proto: Give Circuit a handle to the DynTimeProvider. See merge request tpo/core/arti!3063
| * | tor-proto: Use mockable runtime in congestion control RTT estimator (fmt).Gabriela Moldovan2025-06-231-1/+2
| | |
| * | tor-proto: Use mockable runtime in congestion control RTT estimator.Gabriela Moldovan2025-06-232-7/+13
| | |
| * | tor-proto: Give Circuit a handle to the DynTimeProvider.Gabriela Moldovan2025-06-232-0/+6
| |/ | | | | | | | | | | | | | | This will enable us to replace the calls to `Instant::now()` with `DynTimeProvider::now()` throughout the RTT estimator. This gives us the ability to mock the time, and test that conflux leg switching occurs as expected.
* | proto: Rewrite can_crosscheck_with_current_estimate for clarity.Gabriela Moldovan2025-06-251-1/+1
| | | | | | | | | | | | | | The expanded expression makes it easier to see that `can_crosscheck_with_current_estimate()` can never return `true` if `self.ewma_rtt` is `None`, and that the `expect()` from `is_clock_stalled()` cannot panic.
* | proto: Make RTT estimates default to None (fmt).Gabriela Moldovan2025-06-251-2/+6
| |
* | proto: Make RTT estimates default to None.Gabriela Moldovan2025-06-251-31/+48
| | | | | | | | | | | | | | | | | | | | The `RttEstimator` now uses `None` to represent not-yet-measured RTTs. Previously, all the measured RTTs defaulted to 0, in contradiction with the `RttEstimator::{min,ewma}_rtt_usec()` docs, which state that both functions are supposed to return `u32::MAX` if there is no estimate. Closes #2049
* | Merge branch 'fix-xon-xoff' into 'main'Nick Mathewson2025-06-251-1/+1
|\ \ | | | | | | | | | | | | tor-cell: Fix incorrect XON/XOFF cell command integers See merge request tpo/core/arti!3061
| * | tor-cell: fix incorrect XON/XOFF cell command integersSteven Engler2025-06-231-1/+1
| |/
* | tor-proto: Compile-time key length constant equality assertionhashcatHitman2025-06-241-6/+4
| | | | | | | | | | | | | | - Made an equality assertion between two constants compile-time, resolving a TODO. Signed-off-by: hashcatHitman <[email protected]>
* | tor-proto: Add missing word in conflux docs.Gabriela Moldovan2025-06-231-1/+1
| |
* | tor-proto: Fix typo in comment.Gabriela Moldovan2025-06-231-1/+1
|/
* tor-proto: use `DynamicRateLimitedWriter` in `DataWriter`Steven Engler2025-06-161-6/+17
| | | | This uses just a placeholder `Empty` stream for config updates.
* tor-proto: improve `TokioAsyncWrite` compat implSteven Engler2025-06-161-10/+6
| | | | | | We want the tokio trait to call into the futures trait, rather than having each trait duplicate the logic of calling into the inner writer. This is less error-prone.
* tor-proto: add `DynamicRateLimitedWriter`Steven Engler2025-06-164-2/+296
| | | | | This is a `Writer` rate limiter which can receive rate limit updates from a `Stream`.
* tor-proto: Get rid of unnecessary extra variable.Gabriela Moldovan2025-06-161-3/+1
|
* tor-proto: Adapt the circ mutable state to removal of LegId.Gabriela Moldovan2025-06-161-9/+7
| | | | | Circuits only have one identifier now, so we can remove the second, now-redundant ID.
* tor-proto: Replace LegId/LegIdKey with UniqId.Gabriela Moldovan2025-06-136-166/+136
| | | | Closes #1999
* tor-proto: Derive HasMemoryCost for UniqId.Gabriela Moldovan2025-06-131-1/+5
|
* tor-proto: Update doc links post-renaming.Gabriela Moldovan2025-06-131-1/+1
|
* tor-proto: Group conflux imports for consistency.Gabriela Moldovan2025-06-131-2/+1
|
* tor-proto: Rename function to clarify transition to a new tunnel (fmt).Gabriela Moldovan2025-06-132-2/+9
|
* tor-proto: Rename function to clarify transition to a new tunnel.Gabriela Moldovan2025-06-132-3/+4
|
* tor-proto: Fix up the circuit's tunnel ID after inserting into conflux set.Gabriela Moldovan2025-06-132-2/+4
| | | | | | | | | When adding new circuits to an existing tunnel, we need to fixup the internal TunnelId of those circuits (otherwise they will have the TunnelId of the old single-path "tunnel" reactor they were extracted from using `CtrlCmd::ShutdownAndReturnCircuit`). Spotted while writing some tests.
* tor-proto: Give ConfluxSet a TunnelId for logging purposes.Gabriela Moldovan2025-06-132-4/+14
|
* tor-proto: Use TunnelScopedCircId instead of UniqId for logging.Gabriela Moldovan2025-06-124-10/+12
|
* tor-proto: Add an identifier for a circuit within a tunnel.Gabriela Moldovan2025-06-121-0/+27
| | | | | | This type will help produce better logs (logging just the circuit ID would make it impossible to correlate said circuit with the tunnel it belongs to).
* tor-proto: Assign a separate identifier to the tunnel reactor.Gabriela Moldovan2025-06-122-20/+17
| | | | | | The plan is to reuse this identifier for the future tunnel reactor updates channel (a channel for sending tunnel status updates to a central consumer).
* tor-proto: Log channel, circuit, stream identifiers as structured fields.Gabriela Moldovan2025-06-129-72/+102
| | | | | | | | | | | | | | | | | This changes the `tor-proto` logs to not be prefixed with a channel/circuit/stream ID, but rather to have these IDs attached to the log as structured fields. This change is in preparation for the switch to using `TunnelId`s in the tunnel reactor instead of circuit `UniqId`s. The reason for the change to use structured fields is because future logs will likely need to log the `UniqId`s of the circuits in a tunnel, which will need to either be formatted somehow in the logs, or logged as a structured field (the latter seems like the better option, hence this preparatory change). IMO we should favor structured fields over formatted strings in the logs in general, but that is a bigger project, so I am only doing a spot fix for now.
* tor-proto: Add a new identifier type for tunnels.Gabriela Moldovan2025-06-121-0/+22
| | | | | | | | | | Currently, a tunnel is uniquely identified by the `UniqId` of the first circuit added to the tunnel. This works, but the double-meaning of the `UniqId` is bound to cause confusion in the future (because it blurs the distinction between tunnels and circuits). This introduces a new `TunnelId` type which will replace `UniqId` in the tunnel reactor.
* tor-proto: Write test for conflux cc algorithm validation.Gabriela Moldovan2025-06-111-12/+20
|
* tor-proto: Make conflux test CircParams configurable (fmt).Gabriela Moldovan2025-06-111-10/+7
|