aboutsummaryrefslogtreecommitdiff
path: root/crates/tor-proto/src
Commit message (Collapse)AuthorAgeFilesLines
...
* HopSettings: Note relay usage.Nick Mathewson2025-06-101-0/+3
|
* Avoid a bug with HopSettingsNick Mathewson2025-06-102-5/+22
| | | | | | | When negotiation won't occur, we need to represent the fact by disabling any settings that would depend on negotiation. Otherwise we'll wind up with the client thinking everything was supported, and the relay thinking that nothing is.
* Clarify HopSettings documentation.Nick Mathewson2025-06-101-3/+7
|
* Renamed NegotiatedHopSettings -> HopSettingsNick Mathewson2025-06-104-36/+33
|
* Clarify documentation for from_params_and_caps.Nick Mathewson2025-06-101-1/+6
|
* Clarify per-circuitness of CircParametersNick Mathewson2025-06-101-1/+7
|
* proto: Rename a pair of internal functionsNick Mathewson2025-06-103-16/+14
|
* proto: Refactor cc fallback.Nick Mathewson2025-06-103-10/+14
| | | | | The fallback CC algorithm is _always_ fixed-window, and we should only use it when the selected CC algorithm is not supported.
* Move responsibility for choosing extensions into tor-protoNick Mathewson2025-06-102-6/+16
| | | | | | | | | Now tor-circmgr no longer needs to check which Protover capabilities are enabled, or construct a separate CircParameters for each hop. Instead, tor-proto decides whether to use the fallback CC mode, based on whether the target supports FLOWCTRL_CC. Closes #1967.
* proto: Move NegotiatedHopSettings to a higher levelNick Mathewson2025-06-105-59/+72
| | | | | | We will construct this object based on the circuit parameters _and_ on the target's supported protocol versions, so we need to do so when we have both pieces of info.
* proto: Split CircParameters and NegotiatedHopSettingsNick Mathewson2025-06-106-32/+65
| | | | | | | | | | | One type will now represent _the kind of hop we are asking tor-proto to negotiate_; the other will represent _the state of such negotiation_. This doesn't simplify the code much yet, but it will be helpful as we add more and more negotiable settings. Part of #1967
* tor-proto: handle XON/XOFF messages in conflux seqno logicSteven Engler2025-06-091-1/+2
|
* tor-proto: fix bug in `RateLimitedWriter::poll_write`Steven Engler2025-06-082-16/+100
| | | | | | Previously it did not behave correctly when `bucket.max()` was 0 (it would sleep for 0 time instead of infinitely, triggering a debug assertion).
* tor-proto: change `wake_when_bytes_available` to `NonZero<u64>`Steven Engler2025-06-082-6/+8
|
* tor-proto: add additional unit test for `TokenBucket::adjust`Steven Engler2025-06-081-1/+57
|
* tor-proto: improve `TokenBucket::adjust`Steven Engler2025-06-081-42/+87
| | | | The token bucket is now refilled before changing the rate.
* tor-proto: rename `TokenBucket::last_refill` to `added_tokens_at`Steven Engler2025-06-081-18/+18
|
* tor-proto: return `Result` from `tokens_available_at`Steven Engler2025-06-052-32/+66
|
* tor-proto: change `RateLimitedWriter` logic to use user-configurable limitSteven Engler2025-06-052-16/+50
| | | | The user now sets a constant amount of bytes to wait for.
* tor-proto: change `ClaimedTokens::commit_fewer` to `reduce`Steven Engler2025-06-052-21/+14
|
* tor-proto: add `{TokenBucket,RateLimitedWriter}Config` typesSteven Engler2025-06-053-33/+110
|
* tor-proto: add token bucket test for token/duration calcSteven Engler2025-06-051-0/+64
|
* tor-proto: add missing doc comment to `DataWriter::writer`Steven Engler2025-06-051-0/+1
|
* tor-proto: pass the time provider to the `DataWriter`Steven Engler2025-06-053-11/+28
|
* tor-proto: update doc comments for `DataWriter{,Inner}`Steven Engler2025-06-051-21/+25
| | | | | Unfortunately the git diff thinks I moved the struct, but I really only moved the comment.
* tor-proto: rename `DataWriter`Steven Engler2025-06-051-14/+32
| | | | | `DataWriter` -> `DataWriterInner` `DataWriterNew` -> `DataWriter`
* tor-proto: add (what will be) the new `DataWriter`Steven Engler2025-06-051-0/+44
|
* tor-proto: add a `RateLimitedWriter`Steven Engler2025-06-052-0/+328
|
* tor-proto: add a `TokenBucket`Steven Engler2025-06-053-0/+612
|
* De-duplicate circuit ntorv3 extension generation code.Nick Mathewson2025-06-042-61/+40
| | | | Closes #1969.
* *: suppress cognitive_complexity warnings from nightlyNick Mathewson2025-05-291-0/+3
| | | | | | | | | | | | | Apparently clippy nightly is better (or worse?) about detecting complex functions than before, so I'm suppressing these warnings where they occur. I have mixed feelings about these warnings: On the plus side, they really do help to detect functions that are twistier than they need to be. On the minus side, they get confused by tracing macros, and the "allows" do pile up. But on the plus side, those "allows" do provide a way to find functions that need to be refactored, and they are never uglier than the functions they decorate.
* tor-proto: Remove already addressed TODO.Gabriela Moldovan2025-05-281-3/+0
| | | | | There's already a check right above the TODO that does what the TODO asks.
* tor-proto: Make Path::all_hops() return an iterator.Gabriela Moldovan2025-05-283-15/+13
| | | | This addresses one of the TODOs from `reactor::conflux`.
* tor-proto: Downgrade a few TOOD(conflux) to TODO.Gabriela Moldovan2025-05-282-3/+3
|
* tor-proto: Replace TODO(conflux) with TODO(#2017).Gabriela Moldovan2025-05-281-1/+1
| | | | | This is not a MUST for client-side conflux, so I'm filing it as tech debt.
* tor-proto: Add missing feature-gating to HopDetail::Virtual.Gabriela Moldovan2025-05-281-0/+1
|
* tor-proto: Avoid comparing virtual hops for now.Gabriela Moldovan2025-05-281-17/+22
| | | | | | We don't have a way to compare virtual hops (see #2016), and we don't yet support onion service conflux (see #2002), so let's defer this for now.
* tor-proto: Downgrade a TODO(conflux) to TODO.Gabriela Moldovan2025-05-281-1/+1
| | | | This is tech debt, and is not a MUST for conflux.
* tor-proto: Replace TOOD(conflux) with TODO(#1999).Gabriela Moldovan2025-05-281-1/+1
| | | | | We can tackle this later, after we finish addressing all the remaining `TODO(conflux)`.
* proto: remove bench pub wrappersLionel Goffaux2025-05-226-285/+85
|
* Merge branch 'extend_ntor-fix' into 'main'Nick Mathewson2025-05-211-1/+1
|\ | | | | | | | | | | | | tor-proto: Prevent sink and rx from being dropped in-place. Closes #2005 See merge request tpo/core/arti!3005
| * tor-proto: Prevent sink and rx from being dropped in-place.Gabriela Moldovan2025-05-201-1/+1
| | | | | | | | | | | | | | | | | | This was supposed to be fixed in 164d6b4d6c5, but that change failed to bind `sink` and `rx in `futures::join!`, causing `sink` and `rx` to get dropped, which would, in turn, cause the channel and circuit reactors to shut down, sometimes leading to intermittent failures (#2005). Closes #2005
* | tor-proto: Add TODO about multipath rend circuits.Gabriela Moldovan2025-05-201-0/+6
| |
* | tor-proto: Clarify that we need HopLocation, not TargetHop.Gabriela Moldovan2025-05-201-2/+2
| | | | | | | | Prompted by https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3002#note_3200935
* | tor-proto: Remove now-unused ConfluxSet::legs().Gabriela Moldovan2025-05-201-5/+0
| |
* | Revert "tor-proto: add a non-pub `ClientCirc::legs()` method"Gabriela Moldovan2025-05-202-32/+4
| | | | | | | | | | | | | | | | This reverts commit c2d9ea952b4dcb91d05ee754e8d1a6ec6a0689b2. `QueryLegs` is now unused. We also decided we won't need it for implementing `Tunnel::path_ref()` as we are keeping the `MutableState` between `ClientCirc` and the reactor (see !2996).
* | tor-proto: Remove multi-path check from allow_stream_requests() (fmt).Gabriela Moldovan2025-05-201-1/+8
| |
* | tor-proto: Remove multi-path check from allow_stream_requests().Gabriela Moldovan2025-05-203-23/+35
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously, `ClientCirc:allow_stream_requests()` would return an error when called on a multi-path tunnel. My main reason for removing the conflux set length check is because it enables us to remove the `QueryLegs` control command (which is something we were planning on doing anyway). Note that now that we've removed `ClientCirc::legs(), there's no way for a multi-path `ClientCirc` to access its circuit legs, but that is fine, because it's currently impossible to build multi-path `ClientCirc`s in arti anyway. This issue will be addressed in the fork, in the new `ClientTunnel` type that will be used for multi-path tunnels (a `ClientCirc` will only ever be single-path, so it won't need to have a `legs()` function at all). I am also removing the `TODO(conflux)` that justifies the now-removed check, because it's outdated (nowadays the `CellHandlers` are shared between the tunnel reactor and its circuits). That said, we *still* don't support onion service conflux, but that will be tackled separately because there are a bunch of issues that still need to be resolved to make it work (which I'll document separately). Note that I've also made some changes to pass the `LegId` of the circuit that received the incoming stream request to `StreamReqInfo` and `StreamTarget`. This is in preparation for supporting multipath onion service conflux, and because the `HopLocation` from `StreamTarget` *needs* a `LegId`.
* proto: temporarily suppress warning; see #2003.Nick Mathewson2025-05-152-2/+3
|
* tor-proto: Make TunnelMutableState docs link to MutableState.Gabriela Moldovan2025-05-151-11/+3
| | | | | These `TunnelMutableState` impls just delegate to `MutableState`, so we might as well link to the corresponding docs.