summaryrefslogtreecommitdiff
path: root/crates/tor-proto/semver.md
Commit message (Collapse)AuthorAgeFilesLines
* 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
|
* tor-circmgr: Add a helper for displaying optional UniqIds.Gabriela Moldovan2024-02-271-0/+1
| | | | | | | | Some of the `tor_circmgr::Error` variants will include the `UniqId` of the corresponding circuit, so we'll need to be able to display it without the `Circ ` prefix. Part of #1297
* Remove semver.md files.Nick Mathewson2023-12-041-3/+0
|
* Add `ClientCirc::extend_ntor_v3`Jim Newsome2023-11-271-0/+1
|
* Add PendingClientCirc::create_firsthop_ntor_v3Jim Newsome2023-11-271-0/+1
|
* Send less information in onion service BEGIN messagesNick Mathewson2023-11-151-0/+1
| | | | | | | | | While looking for differences, we found that C tor always omits the flags and the hostname from a BEGIN message sent on an onion service circuit. In torspec!179, we specified that behavior. This patch brings arti into conformance. Closes #1077.
* Remove semver.md files from arti 1.1.10Nick Mathewson2023-10-311-3/+0
|
* proto: Revise the behavior of IncomingStream::discard().Nick Mathewson2023-10-191-1/+2
| | | | | | | | | | | | | Because dropping a `StreamTarget` causes the circuit reactor to send an End, the previous do-nothing implementation of `discard()` wasn't sufficient to cause the request to be ignored without sending an End. This commit modifies our "close pending stream" behavior to only optionally send an End message. To avoid confusion, I'm using a new `CloseStreamBehavior` enum rather than an `Option<End>`, since we had previously used `None` in some cases to indicate a default (misc) end message.
* IncomingStream: Remove state.Nick Mathewson2023-10-191-0/+1
| | | | | | Now that every state-change function consumes the IncomingStream, there is no longer any reason to keep track of an internal state enum.
* Remove the (fairly bogus) HsNtorServiceInput type.Nick Mathewson2023-10-121-0/+1
| | | | This will let avoid some copying inside our HSS code.
* Remove semver.md now that 1.1.8 is out.Nick Mathewson2023-09-051-20/+0
|
* tor-proto: Add a HopNum::display function.Gabriela Moldovan2023-08-251-1/+1
| | | | | | | | | This function can be used to display a more user-friendly representation of a `HopNum`. This will print hop numbers as 1-indexed values: #1, #2, etc.. We will soon remove HopNum's Display implementation in favour of `.display()`.
* proto: new ClientCirc::send_raw_msg function.Nick Mathewson2023-08-211-1/+1
| | | | Closes #1010.
* tor-proto: Make ClientCirc::allow_stream_requests take a HopNum.Gabriela Moldovan2023-08-181-0/+1
| | | | | | | | | | For consistency with the other `ClientCirc` APIs, `ClientCirc::allow_stream_requests` now takes a `HopNum` argument. Upon receiving an incoming stream request, the reactor now checks if the request came from the hop specified in `allow_stream_requests` (and if it came from a different hop, the circuit is closed). Part of #1009
* proto: API to expose the `CircuitBinding` type.Nick Mathewson2023-08-141-0/+3
| | | | Closes #993
* tor-proto: Make update_state() and discard() return Result<(), Bug>.Gabriela Moldovan2023-08-091-1/+1
| | | | These functions only ever return `Bug` errors.
* tor-proto: Implement IncomingStream::discard().Gabriela Moldovan2023-08-081-0/+2
|
* tor-proto: allow_stream_requests now waits until the control message is ↵Gabriela Moldovan2023-08-041-0/+1
| | | | | | | | | | | | | | | | | received. `ClientCirc::allow_stream_requests` is now `async` and waits until the `AwaitIncomingStream` control message is processed by the reactor. This guarantees that by the time the `allow_stream_requests` future resolves, the reactor is ready to process BEGIN/BEGIN_DIR/RESOLVE cells. Previously, the client tasks from allow_stream_requests tests had to sleep before sending the BEGIN cell to give the reactor time to process the `AwaitIncomingStream` control message (which tells the reactor to expect incoming BEGIN/BEGIN_DIR/RESOLVE cells on the circuit). Fixes #994
* tor-proto: Add ClientCirc::start_conversation().Gabriela Moldovan2023-08-041-0/+3
| | | | | | | | | | | This will enable hidden services to send `RENDEZVOUS1` messages to the `N`th hop of the circuit rather than the `N + 1`th virtual one (which can only used after the client and service have completed the introduction handshake). This also deprecates `start_conversation_last_hop`. Closes #959
* tor-proto: Add method for getting the HopNum of the last hop.Gabriela Moldovan2023-08-041-0/+1
|
* tor-proto: Make HopNum public.Gabriela Moldovan2023-08-041-0/+1
| | | | | | `HopNum` will be used in `ClientCirc`'s public API when we refactor `ClientCirc::start_conversation_last_hop` to use the provided hop rather than always using the last one.
* tor-proto: Implement allow_stream_requests.Gabriela Moldovan2023-08-031-0/+2
|
* tor-proto: Implement IncomingStream::{accept_data, request, reject}.Gabriela Moldovan2023-08-031-0/+6
|
* Remove semver.md files now that 1.1.7 is out.Nick Mathewson2023-08-011-1/+0
|
* tor-proto conversations: semverIan Jackson2023-06-301-0/+1
|
* Remove semver.md files from 1.1.5Nick Mathewson2023-06-011-2/+0
|
* Refactor ClientCirc APIs to use Arc<ClientCirc>.Nick Mathewson2023-05-161-0/+2
| | | | | | | | | | | | Now ClientCirc is no longer `Clone`, and the things that need it to be `Clone` instead return and use an Arc<ClientCirc> We're doing this so that ClientCirc can participate in the RPC system, and so that its semantics are more obvious. Closes #846. Thanks to the type system, this was a much simpler refactoring than I had feared it would be.
* Remove semver.md files.Nick Mathewson2023-03-311-1/+0
|
* proto: Stabilize ClientCirc::n_hops.Nick Mathewson2023-03-221-0/+1
|
* Move tor-proto/semver.md to tor-cellNick Mathewson2023-02-011-2/+0
| | | | It was erroneously created in the wrong place.
* Add semver.md for (into_)handshake()Neel Chauhan2022-12-191-0/+2
|
* Remove semver.md files now that 1.1.0 is released.Nick Mathewson2022-11-301-3/+0
|
* proto: Make Channel::reparameterize take &self.Nick Mathewson2022-10-181-1/+2
| | | | | | | | | | Even though channels are practically changeable, they use locks internally so that you don't need a `&mut Channel` to send or receive traffic. It makes sense for reparameterizing the channel to also use a &self reference. I'll need this so that I can store channels in an `ByRelayIds<>` set, and still invoke their reparameterize methods.