summaryrefslogtreecommitdiff
path: root/crates
Commit message (Collapse)AuthorAgeFilesLines
...
| * | | tor-keymgr: Make keygen crate part of the workspace.Gabriela Moldovan2024-05-152-2475/+0
| | | |
| * | | tor-keymgr: Add script for generating test key files.Gabriela Moldovan2024-05-158-0/+2787
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `tor-keymgr/testdata` contains a bunch of OpenSSH keys used for testing. I meant to share the script I generated them with, but somehow never got around to it. Note: the OpenSSH keys generated by this script are going to look slightly different than the ones that are checked into the repo. This is because some of those original key files were generated ad-hoc (I manually modified them a while ago, but I forgot exactly how
* | | | dirauth: Add new faravahar authorityDavid Goulet2024-05-301-1/+2
| |/ / |/| | | | | | | | | | | | | | | | | Related to C-tor MR: https://gitlab.torproject.org/tpo/core/tor/-/merge_requests/819 Signed-off-by: David Goulet <[email protected]>
* | | Merge branch 'poll-ready-unpin-bool' into 'main'Nick Mathewson2024-05-293-12/+28
|\ \ \ | | |/ | |/| | | | | | | Tidy up the ChannelSender::poll_ready inherent method See merge request tpo/core/arti!2171
| * | ChannelSender::poll_ready_unpin_bool: add otiose ext trait docIan Jackson2024-05-291-0/+1
| | |
| * | ChannelSender::poll_ready_unpin_bool: move to utilIan Jackson2024-05-293-20/+24
| | | | | | | | | | | | This is where it belongs.
| * | ChannelSender::poll_ready_unpin_bool: extension traitIan Jackson2024-05-292-1/+8
| | | | | | | | | | | | | | | | | | | | | This makes this available for any Sink + Unpin. Which we want because we're about to wrap our ChannelSender in a Sink wrapper. It's in the wrong place now; we'll move it in a moment.
| * | ChannelSender::poll_ready_unpin_bool: rename from poll_readyIan Jackson2024-05-292-5/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This would otherwise shadow the poll_ready method, which is confusing. Also this paves the way for making it available for any Sink + Unpin. Improve the docs somewhat to explain what this thing actually is.
| * | ChannelSender::poll_ready inherent method: Don't discard errorIan Jackson2024-05-291-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | I think this error was in fact always Error::CircuitClosed because it came from ChannelClosed.into(). Anyway, we shouldn't squash it. Now this function has semantics identical to Sink::poll_ready, just a slightly different signature.
| * | ChannelSender::poll_ready inherent method: Avoid apparent discardIan Jackson2024-05-291-1/+1
| | | | | | | | | | | | Make it clear we're discarding `()`, not an actual value.
| * | ChannelSender::poll_ready inherent method: Use Sink:poll_readyIan Jackson2024-05-291-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | We're going to change this function, but first we are going to make its behaviour identical to Sink::poll_ready. This avoids open-coding the call to poll_read on cell_tx. The error handling is still strange. We'll fix that in a moment.
* | | proto: Try to clarify why StreamReader has a StreamTarget.Nick Mathewson2024-05-292-3/+10
| | |
* | | proto: Add a test for closing streams.Nick Mathewson2024-05-291-1/+74
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This test verifies that when we invoke the code to close a stream, an END message is actually sent. The test comes in two versions: * `drop_stream` closes the stream by dropping it. It currently passes on main. * `close_stream` closes the stream by running `AsyncWriteExt::close` on the writer. It is a regression test for #1368. It currently fails on main.
* | | proto: Improve documentation about DataStream lifetimes and closingNick Mathewson2024-05-292-1/+40
| | | | | | | | | | | | | | | | | | | | | In particular, clarify that dropping the DataWriter on its own does nothing unless the DataReader is also dropped. Related to #1368.
* | | proto: Make DataWriter::close actually do something.Nick Mathewson2024-05-293-9/+41
|/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously we had a bug where `<DataWriter as AsyncWrite>::close` (or `shutdown` in tokio-land) would not actually have any effect. It _would_ drop the `StreamTarget` held by the `DataWriter`, but since the `DataReader` also held a `StreamTarget`, the MPSC channel would not get closed, and the circuit reactor would not realize that the stream wanted to shut down. Now we use `mpsc::Sender::close_channel` to make our closes effectual. Closes #1368. Additionally, we fix a bug where `poll_close()` never actually did anything if the buffer had nothing in it when it was called. Previously, `poll_flush_impl()` would exit immediately if it had no data to flush. That isn't what we want when we are closing!
* | Merge branch 'chan_arc' into 'main'Nick Mathewson2024-05-2813-143/+200
|\ \ | | | | | | | | | | | | Proto: Refactor Channel to always be Arc. See merge request tpo/core/arti!2163
| * | Remove an outdated comment.Nick Mathewson2024-05-201-3/+0
| | |
| * | Make an arc clone explicit.Nick Mathewson2024-05-201-1/+1
| | |
| * | Fix a typo.gabi-2502024-05-201-1/+1
| | |
| * | proto: Divide up some elements of ChannelDetails.Nick Mathewson2024-05-162-52/+58
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously ChannelDetails had a double duty: It held elements shared among the clones of a Channel, and it also held elements shared between the Channel and the Reactor. But now that Channel doesn't have to implement Clone, we can more the non-Reactor elements into Channel itself. This change may improve cache locality a bit, and should make it a little easier to follow the channel code. I've also moved unique_id out of ChannelDetails into Channel _and_ Reactor: it is small, immutable, and used all the time in logging.
| * | Make Channel non-Clone.Nick Mathewson2024-05-163-4/+6
| | |
| * | proto: Make Channel explicitly Arc<.>Nick Mathewson2024-05-1613-43/+56
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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-163-48/+70
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
| * | proto: Document ChannelDetails members that don't need to be shared.Nick Mathewson2024-05-161-1/+7
| | |
| * | proto: Document usage for each mutable part of ChannelDetailsNick Mathewson2024-05-161-1/+12
| | | | | | | | | | | | | | | For all mutable shared state, we ought to know which part of the program sets it, which part of the program reads it, and why.
* | | chanmgr: Delegate to Channel::engage_padding_activities explicitly.Nick Mathewson2024-05-171-1/+1
|/ / | | | | | | | | | | (This isn't a bugfix, but it helps avoid the appearance of a function calling itself. This _would_ become a bug if we imported the wrong trait into scope here.)
* | Merge branch 'special_methods' into 'main'Nick Mathewson2024-05-169-37/+264
|\ \ | | | | | | | | | | | | | | | | | | Allow RPC methods with non-serializable types Closes #1403 See merge request tpo/core/arti!2152
| * | Add a few "TODO RPC" notesNick Mathewson2024-05-162-0/+8
| | |
| * | RPC: Expose dispatch table from ContextNick Mathewson2024-05-163-0/+11
| | | | | | | | | | | | | | | We need to do this so that we can actually invoke RPC functions from one another.
| * | RPC: Fill in documentation about invoke_specialNick Mathewson2024-05-162-6/+27
| | |
| * | Tests for invoke_specialNick Mathewson2024-05-161-0/+42
| | |
| * | RPC: Fix types for DispatchTable::invoke_specialNick Mathewson2024-05-161-11/+14
| | | | | | | | | | | | | | | Now that Method::Error exists, we can downcast Any to the actual function's return type.
| * | RPC: Require an Error type in methods.Nick Mathewson2024-05-167-0/+18
| | | | | | | | | | | | | | | | | | | | | | | | This is needed so that we can cast special methods' return types properly. I wish I could make this optional, but Rust doesn't allow defaulting an associated type.
| * | Rpc: Allow invoker_ents to be marked as @specialNick Mathewson2024-05-161-7/+21
| | | | | | | | | | | | A @special invoker does not get an RPC entry.
| * | Relax Serialize requirement on method outputs.Nick Mathewson2024-05-162-11/+13
| | | | | | | | | | | | | | | Now Methods can return anything; and only if their outputs are Serialize will they implement RpcInvocable.
| * | Split Invocable into RpcInvocable.Nick Mathewson2024-05-161-50/+77
| | | | | | | | | | | | | | | RpcInvocable will only be implemented on types whose output can be serialized.
| * | RPC: Add an "invoke special" mechanismNick Mathewson2024-05-161-1/+62
| | | | | | | | | | | | This is part of work on #1403.
| * | rpc: Move typetag onto subtrait of DynMethodNick Mathewson2024-05-164-23/+43
| | | | | | | | | | | | | | | | | | This will allow us to create dispatchable methods that are only invoked from inside the arti code, and are not themselves serializable.
* | | Merge branch 'vanguards-stub-terminology' into 'main'gabi-2502024-05-163-71/+83
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | tor-circmgr: Replace STUB/STUB+ terminology with SHORT/EXTENDED. Closes #1339 See merge request tpo/core/arti!2161
| * | | tor-circmgr: Fix a broken doc link.Gabriela Moldovan2024-05-161-1/+1
| | | |
| * | | tor-circmgr: Clarify module-level docs.Gabriela Moldovan2024-05-161-0/+6
| | | |
| * | | tor-circmgr: Replace STUB/STUB+ terminology with SHORT/EXTENDED (fmt).Gabriela Moldovan2024-05-161-1/+3
| | | |
| * | | tor-circmgr: Replace STUB/STUB+ terminology with SHORT/EXTENDED.Gabriela Moldovan2024-05-163-46/+44
| | | | | | | | | | | | | | | | | | | | | | | | | | | | The previous STUB/STUB+ terminology was confusing, because STUB and STUB+ are both "circuit stubs" (but STUB is shorter than STUB+). Closes #1339
| * | | tor-circmgr: Rename HsCircStubKind::Stub to HsCircStubKind::Short.Gabriela Moldovan2024-05-163-25/+31
| | | | | | | | | | | | | | | | Part of #1339
* | | | Merge branch 'enforce_sendme_max' into 'main'Nick Mathewson2024-05-163-5/+16
|\ \ \ \ | |_|/ / |/| | | | | | | | | | | proto: Explicitly enforce maxima on SENDME windows. See merge request tpo/core/arti!2150
| * | | proto: Explicitly enforce maxima on SENDME windows.Nick Mathewson2024-05-143-5/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | No actual bug here, just technical debt: For `SendWindow`s, our tag system already ensured that we rejected any SENDME that didn't correspond to an appropriate drain. Still, it doesn't hurt to check. For `RecvWindow`s, it would have been a protocol violation if we ever did this, but it makes sense to make it an internal error if we try. Part of #1383.
* | | | Merge branch 'enforce_method_names' into 'main'Nick Mathewson2024-05-167-11/+138
|\ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | RPC: Enforce method name format. Closes #823 See merge request tpo/core/arti!2149
| * | | | RPC: Give error from RpcMgr::new if method name is sufficiently bad.Nick Mathewson2024-05-142-5/+23
| | | | | | | | | | | | | | | | | | | | | | | | | (We don't give an error about unrecognized namespaces (for now), since we have no way to opt in to them.)
| * | | | RPC: Enforce method name format.Nick Mathewson2024-05-144-1/+110
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We need to do this carefully, since we want our system to be extensible with new namespaces. First, when we are constructing an RpcMgr, we _warn_ about any method names that are misformed. Second, we add a test in the `arti` crate to fail if any method names are invalid. This will only catch method names in crates that `arti` depends on.
| * | | | RPC: Use RPC method names in a consistent format.Nick Mathewson2024-05-143-6/+6
| |/ / / | | | | | | | | | | | | | | | | Specifically, we want a single colon, and we want our method names to be in snake_case.