summaryrefslogtreecommitdiff
path: root/crates/tor-proto/src/circuit.rs
Commit message (Collapse)AuthorAgeFilesLines
* Rename {Any}RelayCell to {Any}RelayMsgOuterNick Mathewson2023-12-141-15/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | This commit is pure renaming, done automatically with rust-analyzer. Comment fixes and other cleanups will be in the subsequent commits. We're doing this renaming because we need a name for the combination of a `RelayMsg` and an `Option<StreamId>` that we use when we have a `RelayMsg` we intend to route to a given stream or circuit internally. Previously we called this a `RelayCell`, but that name was already somewhat inaccurate, and will become _very_ inaccurate with the arrival of prop340, which breaksthe 1:1 relationship between relay cells and relay messages. (If we didn't do this renaming now, we'd soon be making the relationship between `UnparsedRelayCell`and `RelayCell` many-to-many, which would be ridiculous and confusing.) The `RelayMsgOuter` name is a placeholder: We expect that we'll want to rename this type, and may also want to rename `RelayMsg`, and unify our vocabulary in other areas too. But such a renaming will have to wait for a larger discussion affecting the specifications, so that we can use the same vocabulary everywhere.
* Test extend_ntor_v3Jim Newsome2023-11-271-10/+33
|
* Parameterize circuit-extension test by handshake typeJim Newsome2023-11-271-55/+68
|
* Add `ClientCirc::extend_ntor_v3`Jim Newsome2023-11-271-0/+38
|
* Circuit reactor: test ntor-v3 "create"Jim Newsome2023-11-271-43/+101
|
* Add PendingClientCirc::create_firsthop_ntor_v3Jim Newsome2023-11-271-0/+43
|
* Merge remote-tracking branch 'public/hs_begin'Nick Mathewson2023-11-161-0/+1
|\
| * hsrproxy: Send back DONE reasons.Nick Mathewson2023-10-231-0/+1
| | | | | | | | | | This is in keeping with the behavior of C tor, and of torspec!179.
* | Send less information in onion service BEGIN messagesNick Mathewson2023-11-151-0/+5
| | | | | | | | | | | | | | | | | | 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.
* | tor-proto: make ClientHandShake and ServerHandshake generic over aux dataJim Newsome2023-11-151-4/+3
| |
* | ServerHandshake: extend to support ntorv3 extensionsJim Newsome2023-11-151-5/+22
| |
* | Add a caret_int HandshakeType for HTYPE constantsJim Newsome2023-10-261-1/+2
| |
* | Change `CircId` to never be zeroJim Newsome2023-10-251-8/+8
| | | | | | | | | | | | | | | | | | | | This changes the internal representation to be `NonZeroU32` instead of just `u32`. Various places where a circuit ID is optional now use `Option<CircId>`. Fixes a bug in `CircIdRange::sample` that would previously return a circuit ID of 0, when the rng returned 0x8000_0000 for a low range.
* | Convert StreamId to NonZeroU16Jim Newsome2023-10-251-29/+31
|/
* Fix rustdoc link warnings/errors.Nick Mathewson2023-10-201-1/+1
|
* proto: Revise the behavior of IncomingStream::discard().Nick Mathewson2023-10-191-4/+3
| | | | | | | | | | | | | 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.
* proto: Remove TODOs about panics on double-close.Nick Mathewson2023-10-191-17/+2
| | | | | | | Now that `StreamMap::terminate` no longer panics, and now that it permits the kind of double-call that we allow, we can close #1065. Closes #1065.
* Add comments about another problem with close_pending().Nick Mathewson2023-10-171-0/+7
| | | | See #1065 for more information here.
* proto: Make StreamTarget::close() misuse less likely.Nick Mathewson2023-10-171-2/+5
| | | | | | | | | It turns out that we can make `IncomingStream::reject()` consume self, thus making it impossible to hit the double-close error from outside the `tor-proto` crate. Also, we rename `StreamTarget::close()` to `close_pending()` to better reflect its limited applicability.
* oneshot: Use veneer in tor-protoIan Jackson2023-10-111-1/+2
|
* tor-proto: Make allow_stream_requests() not return a ResultNick Mathewson2023-09-271-4/+4
| | | | | | | The function never yields anything but an `Ok`, so we can simplify its type. (Not a stable feature, so no semver entry needed)
* Run maint/add_warning to add lint block everywhereIan Jackson2023-08-231-0/+1
|
* Use "typos-cli" to fix a bunch of typos.Nick Mathewson2023-08-221-1/+1
|
* proto: fix a comment to refer to circuits, not channels.Nick Mathewson2023-08-221-1/+1
|
* Merge branch 'send_raw_msg' into 'main'Nick Mathewson2023-08-221-0/+27
|\ | | | | | | | | | | | | proto: new ClientCirc::send_raw_msg function. Closes #1010 See merge request tpo/core/arti!1525
| * proto: Add crossrefs between start_conversation and send_raw_msgNick Mathewson2023-08-221-0/+6
| |
| * proto: new ClientCirc::send_raw_msg function.Nick Mathewson2023-08-211-0/+21
| | | | | | | | Closes #1010.
* | Resolve warnings about ambiguous/redundant doc linksNick Mathewson2023-08-221-1/+1
|/ | | | | Nightly rustdoc now warns if you have a link that isn't necessary, and if you have a link that might refer to two different things.
* tor-proto: Add test where an incoming stream comes from an unexpect hop.Gabriela Moldovan2023-08-181-0/+44
| | | | | | | This adds a test that checks if the reactor is shut down if it receives an incoming stream request from an unexpected hop. Part of #1009
* tor-proto: Make ClientCirc::allow_stream_requests take a HopNum.Gabriela Moldovan2023-08-181-4/+18
| | | | | | | | | | 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
* tor-proto: Fix dead_code when building without experimental-apiNick Mathewson2023-08-161-0/+1
|
* Merge branch 'remove-unused-import' into 'main'Ian Jackson2023-08-161-1/+3
|\ | | | | | | | | tor-proto: remove unused import See merge request tpo/core/arti!1493
| * tor-proto: remove unused importEmil Engler2023-08-101-1/+3
| | | | | | | | | | This commit removes an unused import within the test module of the `tor_proto::circuit` module.
* | proto: Fix a type-complexity warning.Nick Mathewson2023-08-141-2/+4
| |
* | proto: API to expose the `CircuitBinding` type.Nick Mathewson2023-08-141-1/+33
| | | | | | | | Closes #993
* | proto: Take CircuitBinding one step forward into Reactor::add_hop.Nick Mathewson2023-08-141-2/+2
|/
* tor-proto: Make StreamTarget::close return the oneshot::Receiver instead of ↵Gabriela Moldovan2023-08-081-23/+6
| | | | | | | | | | | | blocking. Instead of having 2 version of `StreamTarget::close` (a blocking one and a nonblocking one), we can just return the `oneshot::Receiver` for receiving the reactor's response and let the caller of `StreamTarget::close` decide whether to block. This allows us to reduce some code duplication in the `IncomingStream` implementation.
* tor-proto: Add a function for closing a stream without waiting for the ↵Gabriela Moldovan2023-08-071-0/+19
| | | | | | | reactor to respond. This will be used for implementing `Drop` for `IncomingStream` (it needs to "reject" the stream on drop).
* Merge branch 'proto-flaky-test' into 'main'gabi-2502023-08-041-12/+18
|\ | | | | | | | | | | | | tor-proto: allow_stream_requests now waits until the control message is received. Closes #994 See merge request tpo/core/arti!1474
| * tor-proto: reject() now waits until the control message is received.Gabriela Moldovan2023-08-041-0/+6
| | | | | | | | | | | | | | | | As a result, by the time the `reject` future resolves, the stream has been removed from the reactor's stream map and the corresponding END cell has been sent. Fixes #998.
| * tor-proto: allow_stream_requests now waits until the control message is ↵Gabriela Moldovan2023-08-041-12/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* | proto: methods to wait until a channel/circuit is shut down.Nick Mathewson2023-08-041-2/+18
|/ | | | | | | | | | | | | | | | | | The implementation here is perhaps excessively simple: we put a `oneshot::Sender` in the `Reactor` object, and a `Shared<oneshot::Receiver>` in the circuit or channel. When the reactor is dropped, any copy of the `Shared<Receiver>` will yield `Err(Cancelled)`. I'm marking these methods as experimental because I'm not sure I've thought of all the implications here, and we might want to change things around. Down the road, these methods might want to yield a `Result<>` indicating why the reactor was shut down. This feature was inspired by a request from Saksham Mittal, and a felt need while working on !1472.
* tor-proto: Add ClientCirc::start_conversation().Gabriela Moldovan2023-08-041-15/+26
| | | | | | | | | | | 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/+14
|
* tor-proto: Bump test sleep to 200ms for now.Gabriela Moldovan2023-08-031-5/+10
| | | | | | | | | | | | This `sleep` is to give the reactor task a chance to process the `AwaitIncomingStream` message. With an 100ms, this test sometimes fails because for some reason the reactor doesn't get a chance to process the `AwaitIncomingStream` control command before the BEGIN cell from the client task is received. This bumps the sleep time to 200ms for now (TODO: follow-up with an MR with a less flaky approach). While trying to repro the issue, I found another corner case for which I've added a TODO HSS.
* tor-proto: Handle new BEGIN cells for rejected stream.Gabriela Moldovan2023-08-031-0/+88
| | | | | | | | | This updates the reactor to call the incoming stream handler even for streams for which we have a stream map entry of `EndSent`. If we've sent an END message for a stream but have not yet received an END message back from the other party, but we later receive a BEGIN from them, it is safe to assume we cam remove the stream from the stream map and handle the new incoming stream request.
* tor-proto: Clarify what we mean by "stream" in allow_stream_requests.Gabriela Moldovan2023-08-031-3/+3
|
* tor-proto: Add TODO regarding allow_stream_requests corner case.Gabriela Moldovan2023-08-031-0/+24
|
* tor-proto: Remove outdated comments.Gabriela Moldovan2023-08-031-3/+0
|
* tor-proto: Add a test for allow_stream_requests.Gabriela Moldovan2023-08-031-0/+70
|