aboutsummaryrefslogtreecommitdiff
path: root/crates/tor-proto
Commit message (Collapse)AuthorAgeFilesLines
...
* tor-proto: Pass a StreamOps handle to the channel reactor.Gabriela Moldovan2025-01-153-2/+16
|
* tor-rtcompat: Big invasive change adding StreamOps bound everywhere.Gabriela Moldovan2025-01-154-13/+23
| | | | | | 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
* tor-proto: Add KistParams type built from NetParameters.Gabriela Moldovan2025-01-153-0/+63
| | | | | | | | Note: this commit makes `tor-proto` depend on `tor-netdir` (because it adds a `KistParams` type that is buildable from `NetParameters`, which is defined in `tor-netdir`). Closes #1729
* tor-proto: Add traced_test to test casesIan Jackson2025-01-152-0/+22
| | | | (We don't add it to the handful of unit tests that don't use an executor.)
* tor-proto: fix bad indentationSteven Engler2025-01-091-3/+3
|
* tor-proto: test `Channel::wait_for_close`Steven Engler2025-01-091-5/+35
|
* tor-proto: make `Channel::wait_for_close` non-experimentalSteven Engler2025-01-091-1/+0
|
* tor-proto: `Channel::wait_for_close` return success statusSteven Engler2025-01-092-14/+42
| | | | | | This had a TODO about returning a "status indication instead of just ()" so this commit adds some status indication that we can expand later if needed.
* Bump versions of internal arti crates for Arti 1.3.2Nick Mathewson2025-01-071-18/+18
| | | | | | | | | | | | | The affected crates follow our regular versioning. They all get bumped to 0.26.0. Done with ``` for crate in $(./maint/list_crates |grep '^arti-\|tor-' ); do cargo set-version --bump minor -p $crate; done ```
* Merge branch 'mod-module-files' into 'main'Nick Mathewson2025-01-071-0/+1
|\ | | | | | | | | clippy: deny `mod_module_files` See merge request tpo/core/arti!2689
| * clippy: deny `mod_module_files`Steven Engler2025-01-061-0/+1
| | | | | | | | | | | | Denies 'mod.rs' files for consistency. https://rust-lang.github.io/rust-clippy/master/index.html#mod_module_files
* | fix: fix typosDimitris Apostolou2025-01-061-1/+1
|/
* Merge branch 'upgrades' into 'main'Nick Mathewson2025-01-061-2/+2
|\ | | | | | | | | Simple dependency upgrades for upcoming release See merge request tpo/core/arti!2685
| * Upgrade to statrs 0.18.0Nick Mathewson2025-01-061-1/+1
| |
| * Upgrade to itertools 0.14.0Nick Mathewson2025-01-061-1/+1
| |
* | Run "fixup-features" in preparation for release.Nick Mathewson2025-01-061-1/+1
|/
* tor-proto: replaced error type of `Sender::send_and_wake`Steven Engler2024-12-101-6/+10
|
* tor-proto: add some (disabled) doc testsSteven Engler2024-12-101-0/+27
|
* tor-proto: moved `Shared::count_wakers` into 'test' modSteven Engler2024-12-101-13/+12
|
* tor-proto: changed an `expect` to a `debug_assert`Steven Engler2024-12-101-5/+4
|
* tor-proto: use thiserror for `SenderDropped`Steven Engler2024-12-101-9/+2
|
* tor-proto: use `ready!` instead of `match`Steven Engler2024-12-101-5/+3
|
* tor-proto: `borrowed()` now explicitly returns a `BorrowedReceiverFuture`Steven Engler2024-12-101-3/+2
|
* tor-proto: improve commentsSteven Engler2024-12-101-15/+31
|
* Revert "tor-proto: implement `FusedFuture` for receiver futures"Steven Engler2024-12-101-57/+10
| | | | This reverts commit d73f8894551d37e3bc36947eccf0c6007ffc066e.
* tor-proto: implement `FusedFuture` for receiver futuresSteven Engler2024-12-101-10/+57
|
* Revert "tor-proto: deduplicate future fields into `FutureState`"Steven Engler2024-12-101-18/+11
| | | | This reverts commit acc79ffb44343e52ecb72e27ee8843a63448ff5a.
* Revert "tor-proto: implement `FusedFuture` for receiver futures"Steven Engler2024-12-101-79/+33
| | | | This reverts commit 2fd105b79c25d919e32e53daf81cb369d1e44331.
* tor-proto: implement `FusedFuture` for receiver futuresSteven Engler2024-12-101-33/+79
| | | | | | | | I considered just using `FutureExt::fuse`, but that becomes a little annoying since the future type is exposed through `IntoFuture::IntoFuture`, which means `ReceiverFuture` would need to wrap a `Fuse`. I figured it's cleaner just to implement the trait directly.
* tor-proto: deduplicate future fields into `FutureState`Steven Engler2024-12-101-11/+18
|
* tor-proto: renamed `ReceiverBorrowedFuture` to `BorrowedReceiverFuture`Steven Engler2024-12-101-5/+5
|
* tor-proto: renamed `ReceiverOwnedFuture` to `ReceiverFuture`Steven Engler2024-12-101-6/+6
|
* tor-proto: rename `Receiver::recv` to `borrowed`Steven Engler2024-12-101-24/+24
|
* tor-proto: moved the `Weak::upgrade` into `Sender::send_and_wake`Steven Engler2024-12-101-22/+15
|
* tor-proto: changed `wakers` from an `Option<_>` to a `Result<_, ↵Steven Engler2024-12-101-9/+21
| | | | WakersAlreadyWoken>`
* tor-proto: added `use std::ops::Drop`Steven Engler2024-12-101-3/+4
|
* tor-proto: removed `Receiver::recv_clone` and implemented `IntoFuture` for ↵Steven Engler2024-12-102-25/+24
| | | | `Receiver`
* tor-proto: renamed `CancelledError` to `SenderDropped`Steven Engler2024-12-101-17/+17
|
* tor-proto: switched from `Slab` to `DenseSlotMap` for waker mapSteven Engler2024-12-102-11/+13
|
* tor-proto: change the message type from `Option<T>` to `Result<T, ↵Steven Engler2024-12-101-9/+12
| | | | CancelledError>`
* tor-proto: changed regular comments on `Shared` to doc commentsSteven Engler2024-12-101-21/+21
|
* tor-proto: update docs on `Channel::reactor_closed_rx`Steven Engler2024-12-101-3/+1
| | | | | This is no longer applicable with the new oneshot broadcast channel design.
* tor-proto: replace oneshot broadcast channelSteven Engler2024-12-103-138/+563
| | | | | The old version had some issues, so this is a rewrite which uses slightly lower level synchronization types (`Mutex` and `OnceLock`).
* tor-proto: replace `Channel`s "closed" state handlingSteven Engler2024-12-102-35/+47
| | | | | | | | | | | | | | | Previously `Channel` had two concepts of "closed". There was an atomic flag that was set to `true` at the end `Reactor::run`, and an experimental oneshot channel where the sender was dropped when the reactor was dropped. This commit consolidates these two using the `oneshot_broadcast` module. This means that the behaviour is consistent between both "closed" statuses (`is_closing()` and `wait_for_close()`). A channel is considered closed when its reactor is dropped. This also helps progress towards making the channel reactor cancellation safe (see arti#1756).
* tor-proto: move `ChannelDetails::reactor_closed_rx` to `Channel`Steven Engler2024-12-101-11/+17
| | | | This doesn't need to be shared with the reactor.
* tor-proto: add 'oneshot_broadcast' util moduleSteven Engler2024-12-102-0/+246
|
* Resolve clippy::manual_div_ceilNick Mathewson2024-12-031-1/+1
| | | | | | | This warning is new in 1.83. Surprisingly, it only triggered once. div_ceil was added in Rust 1.73, and our MSRV is 1.77, so div_ceil is fine to use.
* Resolve clippy::empty_line_after_doc_comments warnings.Nick Mathewson2024-12-031-1/+1
| | | | These are new in Rust 1.83.
* add_warnings, *: Allow clippy::needless_lifetimesNick Mathewson2024-12-031-0/+1
| | | | | | | | In 1.83, this warning triggers on many of our crates. We're thinking of fixing them all, but for now, we're going to disable the warning. This is part of #1765.