aboutsummaryrefslogtreecommitdiff
path: root/crates/tor-proto/src/channel.rs
Commit message (Collapse)AuthorAgeFilesLines
...
* oneshot: Apply deferred rustfmt churnIan Jackson2023-10-111-1/+1
| | | | cargo fmt, precisely.
* oneshot: Use veneer in tor-protoIan Jackson2023-10-111-1/+2
|
* tor-proto: Fix dead_code when building without experimental-apiNick Mathewson2023-08-161-0/+1
|
* proto: methods to wait until a channel/circuit is shut down.Nick Mathewson2023-08-041-1/+21
| | | | | | | | | | | | | | | | | | 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.
* proto: document channel lifecycle better.Nick Mathewson2023-06-281-5/+24
|
* Rename OpenClientChan{Msg,Cell} => OpenChan{Msg,Cell}S2CNick Mathewson2023-02-091-8/+8
|
* tor-proto: Do not parse forbidden commands on inbound cells.Nick Mathewson2023-02-091-2/+32
| | | | | | | | | | Unlike C tor, we treat unrecognized commands as reason to kill off the connection entirely. That's fine; if we need to add an unrecognized command in the future, we can use VERSIONS to negotiate it. Also, if someday we want this code to support relay channels as well, we can use some type trickery to have that work too.
* tor-proto: only parse allowed ChanMsg types during handshake.Nick Mathewson2023-02-091-1/+3
|
* tor-cell: Rename ChanMsg and ChanCell-related types.Nick Mathewson2023-02-071-13/+13
|
* tor-cell: Remove ChanMsg methods that are duplicated in ChanMsgClass.Nick Mathewson2023-02-071-0/+1
|
* tor-cell: Use macro to generate ChanMsg too.Nick Mathewson2023-02-071-1/+1
|
* Fix typosDimitris Apostolou2023-01-071-1/+1
|
* tor-proto: CreateFastWrap::decode_chanmsg: Do not report handshakeIan Jackson2023-01-061-1/+1
| | | | | The debug impl prints the handshake challenge, which we should probably treat as sensitive.
* tor-proto: When relay IDs mismatch, the IDs are sensitive in errorsIan Jackson2023-01-061-1/+3
|
* proto: Make Channel::reparameterize take &self.Nick Mathewson2022-10-181-1/+1
| | | | | | | | | | 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.
* proto: Implement HasRelayIds for Channel.Nick Mathewson2022-10-181-0/+9
|
* Change multiplicity of ChannelMethod and addressesNick Mathewson2022-10-111-4/+4
| | | | | | | Now each `ChanTarget` has at most one `ChannelMethod`, and only `Direct` `ChannelMethods` can have multiple addresses. Closes #600.
* tor-linkspec: Remove the old OwnedFoo::new() functionsNick Mathewson2022-10-061-4/+20
| | | | These are now builders.
* tor-proto: Preserve the ChannelMethod, not the SocketAddrNick Mathewson2022-10-061-11/+20
|
* channel engage_padding_activities: swap docs to tor0protoIan Jackson2022-08-171-1/+11
| | | | This allow us to make a working cross-reference.
* channel fake_channel_details: Use precise cfgIan Jackson2022-08-171-1/+1
| | | | | As per https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/657#note_2826169
* Rename ChannelsParams types to ChannelPaddingInstructionsIan Jackson2022-08-171-4/+4
| | | | | | | | As per https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/657#note_2826167 This makes some lines too long; I will run rustfmt in a separate commit for clarity.
* Channel: Make mutable() and engage_padding_activities infallibleIan Jackson2022-08-171-6/+5
| | | | | | | As per https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/657#note_2826151 This gets rid of quite some Bug error paths.
* Move ChannelUsage from tor_proto to tor_chanmgrIan Jackson2022-08-171-55/+26
| | | | | | | | | | | Replace Channel::note_usage with Channel::engage_padding_activities, which unconditionally causes the channel to (start to) do netflow padding things. The condition now lives in chanmgr. Addresses https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/657#note_2826094
* channel: Clarify (and in some places replace) "frontend" terminologyIan Jackson2022-08-171-4/+5
|
* chanmgr ChannelUsage: Fix and clarify docsIan Jackson2022-08-171-2/+3
|
* tor-proto, testing: Provide new_fake_channelIan Jackson2022-08-161-0/+22
| | | | To test the padding control we will want this.
* tor-proto, testing: Make fake_channel_details availableIan Jackson2022-08-161-16/+18
| | | | Now it's not just cfg(test), but feature testing.
* tor-proto: Make "testing" feature that exports some thingsIan Jackson2022-08-161-2/+15
| | | | | We are going to want this for through-the-layers padding control testing.
* channel padding: Send negotiation cellsIan Jackson2022-08-161-4/+8
|
* tor-proto channel: Make arrangements to send PADDING_NEGOTIATEIan Jackson2022-08-161-0/+1
| | | | | | | | | | | | | This is actually a general facility for inserting locally-generated cells into the outgoing stream. It doesn't seem to be possible to do this without adding an additional condition check to the reactor, since we need to insert it into the right place in the stream, giving it priority over data, and only using it up if there was room in the output. We don't engage this machinery yet, because nothing sets special_outgoing.
* channel: Use channel usage to control channel paddingIan Jackson2022-08-161-8/+111
| | | | | We introduce the per-channel state that is used to keep track of channel usage, and defer padding setup until it's wanted.
* channel: Provide somewhere for the frontend's mutable stateIan Jackson2022-08-161-0/+24
| | | | | Right now this is just furniture. We're going to put channel padding control state here.
* Provide ChannelUsage and plumb it all the way downIan Jackson2022-08-161-0/+27
| | | | | | | | | | | | | Channel padding depends on what the channel is being used for. We therefore need to let the channel code know this information. The implementation of the per-channel padding control logic will be in the new note_usage function, which for now is simply a stub. A future commit will introduce a `PaddingControlState` which lives in the channel frontend; consult the doc comment for that type to see why the plumbing through the channel manager terminates in the channel frontend.
* channel reparameterize: Change error typeIan Jackson2022-08-161-5/+3
| | | | This is going to be able to fail in other ways too, sadly.
* channel: Centralise Channel::send_controlIan Jackson2022-08-161-14/+16
| | | | | | Replaces 4 open-coded call sites. I am going to add one more.
* tor-proto: Unify the check_match code in channel and handshakeNick Mathewson2022-08-101-19/+32
| | | | | | | | | | This had to become a new internal function, since at the point that the handshake needs this code, it does not yet have a Channel to use. This change made the error messages in the handshake code more informative: and now they require a regex to check. Later, we might want to defer formatting these strings, but I don't think we need to do it now.
* Final (?) API revisions for tor-linkspecNick Mathewson2022-08-101-29/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | With this change, each individual identity type becomes optional. The functions that expose them unconditionally are now in a "legacy" trait that only some downstream types are expected to implement. There are new convenience APIs in HasRelayIds: * to return Option<&keytype>, * to see if one identity-set contains another. This commit will break several downstream crates! For the reviewer's convenience, I will put the fixes for those crates into a series of squash! commits on this one. tor-netdir ---------- Revise tor-netdir to accept optional identities. This required some caveats and workarounds about the cases where we have to deal with a key type that the tor-netdir code does not currently recognize at all. If we start to add more identity types in the future, we may well want more internal indices in this code. tor-proto --------- In order to make tor-proto support optional identities, there were fewer changes than I thought. Some "check" functions needed to start looking at "all the ids we want" rather than at "the two known IDs"; they also needed to accommodate that case where we don't have an ID that we demand. This change will also help with bridges, since we want to be able to connect to a bridge without knowing all of its IDs up front. The protocol currently _requires_ the two current ID types in some places. To deal with that, I added a new `MissingId` error. I also removed a couple of unconditional identity accessors for chanmgr; code should use `target().identity(...)` instead. tor-chanmgr ----------- This is an incomplete conversion: it does not at all handle channel targets without Ed25519 identities yet. It still uses those identities to index its internal map from identity to channel; but it gives a new `MissingId` error type if it's given a channel target that doesn't have one. We'll want to revise the map type again down the road when we implement bridges, but I'd rather not step on the channel-padding work in progress right now. tor-guardmgr ------------ This change is mostly a matter of constructing owned identity types more sensibly, rather than unwrapping them directly. There are some places marked with TODOs where we still depend on particular identity types, because of how the directory protocol works. This will need revisiting when we add bridge support here. tor-circmgr ----------- These changes are just relatively simple API changes in the tests.
* tor-linkspec: Refactor out traits to represent a relay's ID set.Nick Mathewson2022-08-021-1/+1
| | | | | | | | | | | | | | We want the set of identities supported by a relay to be extensible in the future with minimal fuss; we'd also like to make working with these ID sets more convenient. To handle that, this commit adds a new trait for "Something that has the same IDs as a relay" and a new object for "an owned representation of a relay's IDs." This commit introduces a similar trait for "Something with a list of SocketAddr, like a relay has." There's no owned equivelent for that, since Vec<SocketAddr> is already a thing. Closes #428.
* Remove some testing-only reimplementations of OwnedChanTarget.Nick Mathewson2022-08-021-30/+3
| | | | These predate OwnedChanTarget, and are no longer needed.
* Merge branch 'display_source_cleanup' into 'main'eta2022-06-211-2/+3
|\ | | | | | | | | Do not include error source() in display() format. See merge request tpo/core/arti!598
| * Do not include error source() in display() format.Nick Mathewson2022-06-211-2/+3
| | | | | | | | | | | | | | | | | | According to doc/Errors.md, and in keeping with current best practices, we should not include display an error's `source()` as part of that error's display method. Instead, we should let the caller decide to call source() and display that error in turn. Part of #323.
* | channel padding: Rename ChannelsParams from ChannelsConfig (rustfmt)Ian Jackson2022-06-211-1/+1
| | | | | | | | Consequential ordering changes.
* | channel padding: Rename ChannelsParams from ChannelsConfigIan Jackson2022-06-211-5/+5
| | | | | | | | | | | | | | As per https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/586#note_2814276 Change names and comments and docs everywhere.
* | tor-proto: Have Channel::reconfigure throw ChannelClosedIan Jackson2022-06-211-2/+2
| | | | | | | | | | Addresses https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/586#note_2813567
* | tor-proto: err: Provide ChannelClosed as a separate unit errorIan Jackson2022-06-211-9/+10
| |
* | channel padding: Plumb settings from chanmgrIan Jackson2022-06-211-12/+2
| |
* | channel padding: Introduce ChannelsConfig and reconfigure facilityIan Jackson2022-06-211-1/+16
| | | | | | | | Nothing geenrates config updates yet.
* | channel padding timer: Allow creation without providing parameters yetIan Jackson2022-06-211-2/+2
| | | | | | | | It turns out that we are going to want this.
* | channel padding: Make Parameters a pub struct with builderIan Jackson2022-06-211-1/+1
|/ | | | chanmgr is going to want to make one of these from a NetDir.