aboutsummaryrefslogtreecommitdiff
path: root/crates/tor-proto/src
Commit message (Collapse)AuthorAgeFilesLines
...
* tor-proto: Make stream queues participate in memquotaIan Jackson2024-10-032-8/+19
| | | | Change the typss of StreamMpscSender and StreamMpscReceiver.
* tor-proto: channel: Provide time_provider accessorsIan Jackson2024-10-031-0/+17
| | | | This will save circuits etc. keeping their own clone of the time provider.
* tor-proto: Make circuit->channel queues participate in memquotaIan Jackson2024-10-033-10/+41
| | | | | | | | We use the *channel*'s memquota account. This is arguably wrong, but it's hard to get right now. See #1652. Change the type of the queue, and the places it's constructed. The use sites can all stay the same.
* tor-proto: Introduce a fake_mpsc helper for channel testsIan Jackson2024-10-031-2/+11
| | | | | This provides a nice place to change in the tests, when we want to change the way the queue is made.
* tor-proto: Put a StreamAccount in DataStream etc.Ian Jackson2024-10-034-7/+29
|
* tor-proto: Put a StreamAccount in DataStream etc. (pre-fmt)Ian Jackson2024-10-031-2/+9
|
* tor-proto: Put a CircuitAccount in ClientCirc and circuit::ReactorIan Jackson2024-10-032-1/+18
|
* tor-proto: Plumb the ChannelAccount through to queue creation siteIan Jackson2024-10-034-6/+51
| | | | | This gets it as far as the outbound circuit->channel mpsc queue creation. Also, we provide an accessor for it.
* tor-proto: Plumb the ChannelAccount through to queue creation site (pre-fmt)Ian Jackson2024-10-032-2/+10
|
* tor-proto: Make PendingClientCirc::new fallible (fmt)Ian Jackson2024-10-031-7/+1
|
* tor-proto: Make PendingClientCirc::new fallibleIan Jackson2024-10-032-6/+7
|
* tor-proto: channel: Make construction fallibleIan Jackson2024-10-033-5/+7
| | | | | Making a channel is going to involve making a memquota Participant, which can fail.
* tor-proto: Provide a variant for memquota errorsIan Jackson2024-10-031-0/+6
|
* Provide newtypes to distinguish memoquota accounts at different levelsIan Jackson2024-10-032-0/+118
|
* Merge branch 'mcost' into 'main'Ian Jackson2024-10-022-2/+8
|\ | | | | | | | | Implement tor_memquota:HasMemory cost for a lot of types See merge request tpo/core/arti!2459
| * Some HasMemoryCost impls in tor-protoIan Jackson2024-10-022-2/+8
| |
* | Merge branch 'misc' into 'main'Ian Jackson2024-10-021-0/+10
|\ \ | |/ |/| | | | | tor-proto: SometimesUnboundedSink: provide as_inner accessor See merge request tpo/core/arti!2483
| * tor-proto: SometimesUnboundedSink: provide as_inner accessorIan Jackson2024-10-021-0/+10
| |
* | Merge branch 'mpsc-types' into 'main'Ian Jackson2024-10-024-20/+40
|\ \ | | | | | | | | | | | | tor-proto: Introduce type aliases for some queues See merge request tpo/core/arti!2484
| * | tor-proto: Introduce type alias for StreamReqSenderIan Jackson2024-10-021-2/+6
| | | | | | | | | | | | This will make it a little easier to change the type later.
| * | tor-proto: Introduce type aliases for stream queues (fmt)Ian Jackson2024-10-021-4/+3
| | |
| * | tor-proto: Introduce type aliases for stream queuesIan Jackson2024-10-024-18/+35
| |/ | | | | | | This will make it easier to change their types.
* | Merge branch 'close-channel-2' into 'main'Nick Mathewson2024-10-022-12/+12
|\ \ | |/ |/| | | | | Provide and implement SinkCloseChannel See merge request tpo/core/arti!2485
| * tor-proto: Use trait methods for try_send and channel_close (fmt)Ian Jackson2024-10-011-10/+7
| |
| * tor-proto: Use trait methods for try_send and channel_closeIan Jackson2024-10-012-5/+8
| | | | | | | | This prepares us to change the types of these queues.
* | tor-proto: Add a CoarseTimeProvider bound to all the SleepProviders (fmt)Ian Jackson2024-10-011-4/+14
| |
* | tor-proto: Add a CoarseTimeProvider bound to all the SleepProvidersIan Jackson2024-10-012-11/+11
|/ | | | | | | The memquota arranagements are going to use this. We *don't* apply this to Channel (or to other types that aren't already generic over SleepProvider).
* tor-proto: Allow all dead code if not all features enabledIan Jackson2024-09-301-5/+2
| | | | | | | | | | | | | | | | | | Fixes cargo check -p tor-chanmgr --all-features --all-targets which otherwise prints warning: method `reply` is never used --> crates/tor-proto/src/crypto/handshake.rs:73:8 | 65 | pub(crate) trait AuxDataReply<H> | ------------ method in this trait ... 73 | fn reply(&mut self, msg: &H::ClientAuxData) -> Option<H::ServerAuxData>; | ^^^^^ | = note: `#[warn(dead_code)]` on by default
* tor-proto: Use Reader::take_all_but().Nick Mathewson2024-09-161-8/+1
|
* tor-bytes: Error: provide and call Error::incomplete_errorIan Jackson2024-09-111-1/+1
| | | | | | | | | | | | | | | | | | | We introduce the new constructor and call it at the error generation sites. But there is still not yet any functional change. Change the type of Truncated's field to be Sensitive. The original reason for not doing this no longer applies, since we don't generally want to open-code construction of this variant. Conveniently, changing the type means we get to find all the sites where one *is* constructed and adjust them. In reader.rs and tor-proto we can just call incomplete_error. In tor-cell, there's a call site where we previously provided an underestimate, and where the Reader isn't available. We adjust that ad-hoc but this is fine because the error variant will change. (relaycell is using a Reader from from_slice.)
* tor-bytes: Add a deficit field to Error::Truncated (fmt)Ian Jackson2024-09-101-1/+3
|
* tor-bytes: Add a deficit field to Error::TruncatedIan Jackson2024-09-101-1/+2
| | | | This will allow us to fix #1592, but it doesn't do so yet.
* Fix typosDimitris Apostolou2024-09-032-3/+3
|
* Move stream_peek into tor-async-utilsJim Newsome2024-08-291-2/+2
|
* extract tor_async_utils::oneshot into ::oneshot-fused-workaroundJim Newsome2024-08-287-10/+9
| | | | | | | | | | | | | | Having this in the `tor-async-utils` crate prevents us from doing both of the following without introducing a circular dependency: * using it in `tor-rtmock` (which we currently do, particularly in tests). * using `tor-rtmock` to test things in `tor-async-utils`. We don't do this yet, but it is generally sensible to do so. In particular we want to move the `stream_peak` module there, which is currently tested with `tor-rtmock`. Moving this into its own crate avoids this circular dependency.
* `tor_proto::channel`: update comment to point to `tor-chanmgr`Jim Newsome2024-08-271-2/+1
|
* `circuit` docs: delete comment about no flow-control etcJim Newsome2024-08-261-2/+0
| | | | | There is now (sendme-style) flow control, and some fairness (via round robin scheduling of streams).
* `circuit` docs: delete "one big mutex" limitationJim Newsome2024-08-261-3/+0
| | | | | | There is a mutex for some of the "mutable state", but the reactor only needs to lock it when adding a hop. It's not needed "to process a cell" or when streams send. Probably not worth calling out here.
* tor-proto circuit: add unit test for fairnessJim Newsome2024-08-221-0/+128
|
* flow-control: document idea for making more robustJim Newsome2024-08-212-0/+11
| | | | | From <https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/2340#note_3062531>
* Circuit reactor: improve code commentsJim Newsome2024-08-211-3/+11
| | | | | In particular, clarify that stream-flow-control msgs don't get blocked on circuit congestion control.
* StreamPollSet: disallow polling ready streamsJim Newsome2024-08-212-30/+46
|
* StreamMap: Use StreamUnobtrusivePeeker instead of PeekableJim Newsome2024-08-211-4/+5
|
* tor-proto: Use PeekableStream to get rid of redundant bufferingJim Newsome2024-08-213-235/+303
| | | | | | | | | | | | | | | | | | | | | | | | | * Update `StreamPollSet` to require that its streams implement `PeekableStream`, and to not do its own buffering of values read from the stream. This avoids an extra layer of buffering for streams that already buffer a value, and makes the interior state a little simpler and more robust. It does have a downside of making the API a little less convenient, since the caller must do its own `poll_peek` call if it wants a reference to the item. * Update `StreamMap` to implement `PeekableStream` for `OpenStreamEntStream`, as it must to satisfy the updated `StreamPollSet` API. We have to somewhat constrain the `poll_ready_streams_iter` API to no longer return both a reference to the stream and the message. I don't see a way to return both while satisfying the borrow checker. Luckily we don't really need both anymore. * Update the Circuit reactor to handle the updated `StreamMap::poll_ready_streams_iter` API.
* Circuit reactor: Update comments about outbound message handlingJim Newsome2024-08-151-3/+7
|
* Circuit reactor: remove `'hop_streams` loopJim Newsome2024-08-131-33/+24
| | | | | | | | | | As clippy points out otherwise, this no longer actually loops. Since the iterator already guarantees that the messages it produces are ready to send with respect to flow control, and we've already validated that we can send with respect to the circuit window, the loop, we can always handle the first item from the iterator. i.e. this changes a `while let` to an `if let`.
* Circuit reactor: remove `'outer` loopJim Newsome2024-08-131-55/+50
| | | | This is no longer needed. Removing it shouldn't change any behavior.
* Circuit reactor: don't process streams when we don't have circuit windowJim Newsome2024-08-131-18/+11
| | | | | | | When we've exhausted circuit-level SENDME window, iterating over streams is likely to be a waste of CPU. Theoretically we might be able to send some messages that don't count towards windows, but on balance it doesn't seem worth it.
* StreamMap: apply stream flow control before making messages availableJim Newsome2024-08-132-17/+83
| | | | | | This prevents us from having to iterate over streams blocked on flow control inside the circuit reactor, and potentially allows further simplification.
* tor-proto: Encapsulate flow-controlJim Newsome2024-08-135-59/+132
| | | | | | Encapsulate flow-control into a separate object that partially abstracts away the difference between window-based (legacy) flow control and xon-based (prop324) flow control.