summaryrefslogtreecommitdiff
path: root/crates/tor-proto/semver.md
Commit message (Collapse)AuthorAgeFilesLines
* proto: Update semver with the changes to the loggingDavid Goulet2026-08-031-0/+1
| | | | Signed-off-by: David Goulet <[email protected]>
* proto: Pass the allowed incoming commands to CreateRequestHandlerGabriela Moldovan2026-06-301-0/+1
| | | | | | | | | | | This enables us to make these configurable: any relays that are not configured to be an exit will exclude BEGIN and RESOLVE from their list of allowed commands, causing exit and DNS streams to be rejected as soon as the BEGIN/RESOLVE cell is received in the circuit reactor. Context: https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/4145#note_3430345 Part of #2606
* Remove semver.md filesNick Mathewson2026-06-301-2/+0
|
* proto: Pass an IncomingStreamRequestFilter factory to the create handlerGabriela Moldovan2026-06-291-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This implements what we discussed in `doc/dev/notes/relay-streams.md` (lines 218-234): > Currently, to allow incoming stream requests on a circuit, > you first need to call `RelayCirc::allow_stream_requests()` > to install a `CmdChecker` and `IncomingStreamRequestFilter`. > This is not ideal, because `allow_stream_requests()` will need to be > called unconditionally, on each `RelayCirc`, > right after it's created in the `CreateHandler` impl > (which in turn, would mean making `handle_create()` async too, > because `allow_stream_requests()` is async, which wouldn't be great). > > So, the first step here is to rework the `RelayCirc` API to make relay circuits > be constructable with a list of allowed `RelayCmd`s and `IncomingStreamRequestFilter` > from the get-go ([#2582]), and to get rid of `allow_stream_requests()`, > which will enable the `CREATE*` handler to remain non-`async`. > > In any case, the `CREATE*` handler will still require some changes, > because it needs to be initialized with an `IncomingStreamRequestFilter`, I am not sure using an `IncomingStreamRequestFilter` "factory" is necessarily the right approach here, but the circuit `Reactor`'s constructor needs to take an `IncomingStreamRequestFilter`, and `IncomingStreamRequestFilter` is not `Clone` (and FWIW, I think it's better if we don't make it `Clone`). One obvious limitation is that the `IncomingStreamRequestFilter` of the circuit reactor is fixed for the entire lifetime of the circuit. In practice, I don't think this is going to be a problem, because the arti-relay `IncomingStreamRequestFilter` is only going be used for * preventing single-hop exit streams * per-circuit rate-limiting. Both of these checks will require the filter to have access to a recent `NetDir`, which is straightforward if the filter has an Arc<dyn NetDirProvider> (as mentioned in doc/dev/notes/relay-streams.md, `NetDirProvider` has a handy non-async `timely_netdir()` function we can use). And since these checks are based on consensus params, we don't really need to ever update an already-built circuit with a new `IncomingStreamRequestFilter` (because all `IncomingStreamRequestFilter` will have the ability to obtain a fresh `NetDir` as needed). Nevertheless, I left a TODO about this, because I expect this type to change once we figure out all the other pieces needed for #1448.
* proto: Add crate-level exports for two extra stream types (fmt)Gabriela Moldovan2026-06-171-0/+1
|
* Remove semver.md files post-releaseGabriela Moldovan2026-06-011-1/+0
|
* tor-proto: clean up `CIRCUIT_BUFFER_SIZE`Steven Engler2026-05-211-0/+1
|
* Remove semver.md files post-releaseGabriela Moldovan2026-03-031-3/+0
|
* proto: Remove unused ChannelBuilderDavid Goulet2026-02-191-0/+1
| | | | Signed-off-by: David Goulet <[email protected]>
* proto: Rename CircSyncView to CircHopSyncViewGabriela Moldovan2026-02-161-0/+1
| | | | And update the docs
* proto: Make ChannelProvider::get_or_launch() synchronousGabriela Moldovan2026-02-041-0/+1
| | | | This just removes an unnecessary `async`.
* release: Remove semver.md files from 2.0.0 release.Wesley Aptekar-Cassels2026-02-021-4/+0
|
* chanmgr: Spawn task for ChannelProvider impl of get_or_launch()David Goulet2026-01-131-0/+1
| | | | | | | | | | | | | To pull this off, ChannelProvider::get_or_launch() needed to change from "&self" to "self: Arc<Self>" so we could pass self to the spawned task. This is fine as the caller of ChannelProvider (circuit reactor) has a Arc<ChanMgr>. This also removes the PhantomData for the runtime as we now actually use it. Signed-off-by: David Goulet <[email protected]>
* proto: Add semver.md for breaking changesDavid Goulet2026-01-131-0/+3
| | | | Signed-off-by: David Goulet <[email protected]>
* Remove semver.md files post-releaseGabriela Moldovan2025-12-021-4/+0
|
* proto: Add a semver entry for ClientInitiatorHandshakeDavid Goulet2025-11-191-0/+2
| | | | Signed-off-by: David Goulet <[email protected]>
* proto: Replace ClientCircSyncView in IncomingStreamRequestFilterGabriela Moldovan2025-10-301-0/+2
|
* maint: remove all semver.md filesSteven Engler2025-10-301-1/+0
|
* proto: Change visibility for some channel objectsDavid Goulet2025-10-231-0/+1
| | | | | | | | | | Upcoming code for relay channels are put in the src/relay module and thus we need visibility into some channel generic things. Turns out also we don't need to re-export publicly UnverifiedChannel and VerifiedChannel. Signed-off-by: David Goulet <[email protected]>
* release: Remove old semver.md files.Wesley Aptekar-Cassels2025-10-021-3/+0
|
* circmgr: Pass the timeout estimator to circuit constructor.Gabriela Moldovan2025-09-161-1/+1
| | | | | This enables us to read the CBT estimates from the circuit reactor (we need these to compute the half-stream timeouts for #264).
* proto: Use the CBT to compute half-stream timeouts.Gabriela Moldovan2025-09-161-0/+1
|
* Merge branch 'xon-xoff-checker' into 'main'David Goulet2025-09-151-0/+1
|\ | | | | | | | | tor-proto,tor-netdir: add flow control consensus parameters See merge request tpo/core/arti!3249
* | tor-proto: fix path of `semver.md`Steven Engler2025-09-111-0/+1
|/ | | | | `Release.md` gives a wildcard path of `crates/*/semver.md`, so it seems that these files should go in the top level of each crate.
* Remove semver.md filesNick Mathewson2025-08-281-2/+0
|
* proto: Add a circuit module shared between client and relay impls.Gabriela Moldovan2025-08-281-0/+1
| | | | | | | This is just code motion (I suggest reviewing with `--color-moved`). This also moves the implementation-agnostic parts from `tor_proto::client::circuit` to a new `tor_proto::circuit` module.
* proto: Move the `stream` module under `client` (breaking).Gabriela Moldovan2025-08-181-0/+1
| | | | | | | | | | | | The `stream` module is client-specific, for the most part, so I am moving it under `client`. Later on, we will factor out the parts that can be shared with the relay implementation. Note: this is a breaking change as the deleted `stream` module was `pub`. We could've kept the module and reexported from it the public types from `tor_proto::client::stream`, but I think it's better to have this `client` namespacing, because it makes the separation between the client and relay parts clearer.
* Remove semver.md files post-release.Gabriela Moldovan2025-07-081-7/+0
|
* tor-proto: rework `StreamReceiver` into a `futures::Stream`Steven Engler2025-06-261-0/+2
| | | | | | | | | | | 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.
* tor-proto: rename `StreamReader` to `StreamReceiver`Steven Engler2025-06-261-1/+2
| | | | | | | | | | | | | 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.
* Add a semver file for tor-proto changesNick Mathewson2025-06-101-0/+4
|
* release: Delete semver.md files after release.Alexander Hansen Færøy2025-06-051-2/+0
|
* tor-proto: Remove deprecated ClientCirc functions.Gabriela Moldovan2025-05-151-0/+2
| | | | | | These functions have been deprecated for a while, and are now complicating the `MutableState` changes we need to do for #1840, so it seems like a good time to remove them.
* release: Bump all unstable tor/arti crates to 0.30.0Wesley Aptekar-Cassels2025-05-011-1/+0
| | | | | | | | ``` for crate in $(./maint/list_crates | rg '^(tor|arti-)'); do cargo set-version -p $crate 0.30.0 done ```
* maint: Update semver.md files from semver-checksWesley Aptekar-Cassels2025-04-301-0/+1
|
* Remove semver.md files post-release.Gabriela Moldovan2025-04-011-1/+0
|
* proto: make padding::Parameters construction fallible.Nick Mathewson2025-03-181-0/+1
| | | | | | | The constructor for rand::distr::Uniform is now fallible, so it makes sense to bubble up its restrictions. This is a breaking change.
* Remove semver files for 1.4.1Nick Mathewson2025-03-031-1/+0
|
* tor-proto: added 'semver.md' fileSteven Engler2025-02-101-0/+1
|
* Remove semver.md files post releaseIan Jackson2025-02-071-5/+0
|
* proto: Remove ConversationInHandlerDavid Goulet2025-02-041-0/+1
| | | | | | | | | | | | | | | | | | | It is unused but most importantly it allows any RELAY cell to be sent from anywhere in the code which is really not desirable because it is skipping congestion control. It also allows us to remove the `control_tx` from the reactor which is one less channel to track/understand/think about. This opens up the door to all sorts of problems especially side channel that can be exploited if we are not careful. We can always bring this back if we need it but for now, it is unused and allows us to remove the `CtrlMsg::SendRelayCell` control message. No code behavior change. Signed-off-by: David Goulet <[email protected]>
* tor-proto: Rewrite circuit reactor run_once() loop to use select!.Gabriela Moldovan2025-01-291-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This rewrites the circuit reactor main loop to use `select_biased!` to poll multiple futures simultaneously. The new `run_once()`, like the old, first waits for an initial `CtrlMsg::Create`. Then, it uses a `select_biased!` to poll the `chan_sender` sink and shutdown channel for readiness. When the channel sink is ready, we poll the `control` and `input` channels like before, as well as the new `ready_streams` `Stream` (`ready_streams` is a `futures::Stream` that replaces the previous `send_outbound()` function). Most of the implementation remains unchanged, except the `handle_input`, `handle_cell` and `handle_control` functions no longer send anything on the `chan_sender` channel. Instead, they may do some (synchronous) processing, and send instructions for the remaining work that needs to be done (for example, for writing the cell to the `chan_sender` channel). These instructions are handled at the end of `run_once()`, and are encoded in the `RunOnceCmdInner` enum. What this change does **not** do: * the control channel *still* bypasses congestion control. We could fix this by making the various reactor functions send the `RunOnceCmdInner` commands to `run_once()` via a channel (instead of returning them). This would enable the reactor to stop reading the commands (except for handle `Sendme`, which would be handled separately) if it's blocked on congestion control.
* tor-rtcompat: Big invasive change adding StreamOps bound everywhere.Gabriela Moldovan2025-01-151-0/+1
| | | | | | This is unfortunately necessary, because after the channel handshake, we need to give the channel reactor a `StreamOps` handle to the underlying stream.
* tor-rtcompat: Add the ability to get a StreamOps handle.Gabriela Moldovan2025-01-151-0/+1
| | | | | | | | | | | | | | | | | | | | | | | Needed for cases where we wrap an object that implements `StreamOps` in an external type, thereby losing access to the `StreamOps` functionality. For example, during the channel handshake, we `.split()` the stream that implements `StreamOps`, which leaves us with a `SplitSink` and a `SplitStream`, neither of which implement `StreamOps`. Getting a handle to the underlying object that implements `StreamOps` (for example, a file handle) *before* the stream is `.split()` enables us to use `StreamOps` to manipulate the underlying split stream. This commit also introduces a special `UnsupportedStreamOpsHandle`, which is a type that implements `StreamOps`, but always returns an error. This type is meant to simplify error handling and usage, and is meant to be used in cases where `StreamOps` is not supported. TODO: the name of this type is pretty confusing (it's very similar to `UnsupportedStreamOp`, which is an error type), and should probably be renamed to something else (`NoOpStreamOpsHandle`, `BrokenStreamOpsHandle`, `DummyStreamOpsHandle` come to mind...). Note: this changes the `StreamOps` trait to be slightly different from what I originally envisioned in !2660 and #1769
* Remove semver.md files.Gabriela Moldovan2024-06-051-10/+0
| | | | The 1.2.4 release is out, so we won't be needing these anymore.
* Make Channel non-Clone.Nick Mathewson2024-05-161-0/+2
|
* proto: Make Channel explicitly Arc<.>Nick Mathewson2024-05-161-0/+3
| | | | | | | | | | | | | | | | Previously, Channel was a type that you could Clone that implicitly its state. Now, Channel always appears as an Arc<Channel>. This change has several benefits: * It makes the relationship between Channel struct and the underlying channel more clear. * It enables Channel to participate in the RPC system, where everything has to be an Arc<.> * It enables us to have a Weak<Channel>, if we ever want to. * It will let us move various members out of ChannelDetails. We did this change a while ago with ClientCirc.
* proto: Move Channel send functionality into a separate type.Nick Mathewson2024-05-161-0/+5
| | | | | | | | | | | | This serves three purposes: * It removes the 'send a cell' method from the channel's public API. Nothing outside of tor-proto should have to use this. * It paves the way for giving each circuit a separate handle onto the channel's send functionality. This will eventually let the channel multiplex among circuits more intelligently. * It prepares for the next commit, which will make Channel itself universally Arc<.>ed.
* Remove semver.md files from arti 1.2.0 release.Gabriela Moldovan2024-03-041-1/+0
|
* tor-proto: Note the addition of PendingClientCirc::peek_unique_id in semver.md.Gabriela Moldovan2024-02-281-1/+1
|