summaryrefslogtreecommitdiff
path: root/crates
Commit message (Collapse)AuthorAgeFilesLines
...
* | | 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.
* | | | Merge branch 'use-locked-build' into 'main'Ian Jackson2024-05-162-2/+2
|\ \ \ \ | |_|/ / |/| | | | | | | | | | | doc: Use locked build See merge request tpo/core/arti!2157
| * | | doc: Use locked buildpinkforest2024-05-162-2/+2
| | | |
* | | | Merge remote-tracking branch 'upstream/main' into HEADGabriela Moldovan2024-05-15115-1170/+2411
|\| | |
| * | | arti-client: Add one-hop circuit examplejuga2024-05-152-0/+67
| | |/ | |/| | | | | | | Co-authored-by: gabi-250 <[email protected]>
| * | Merge branch 'vanguards-extend-stub' into 'main'gabi-2502024-05-142-22/+98
| |\ \ | | | | | | | | | | | | | | | | | | | | | | | | tor-circmgr: If necessary, extend the circuit to become STUB+. Closes #1400 and #1409 See merge request tpo/core/arti!2145
| | * | tor-circmgr: Reword a somewhat inaccurate comment about vanguards.Nick Mathewson2024-05-141-1/+1
| | | |
| | * | tor-circmgr: Fix path not being extended if lite vanguards are enabled.Gabriela Moldovan2024-05-141-1/+10
| | | |
| | * | tor-circmgr: Assign error-handling closure to variable.Gabriela Moldovan2024-05-141-7/+10
| | | | | | | | | | | | | | | | We will soon need to reuse this.
| | * | tor-circmgr: Rename neighbor_exclusion variables for clarity.Gabriela Moldovan2024-05-141-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | I am about to reuse one of these on the "lite" vanguards branch. I am renaming them to make it easier to see which one of the two I will be using.
| | * | tor-circmgr: After building the HS path, assert the length is correct.Gabriela Moldovan2024-05-141-1/+18
| | | | | | | | | | | | | | | | | | | | | | | | One of these assertions currently fails, because we have a bug in the vanguard path builder: if lite vanguards are enabled, we only build 2-hop circuits instead of 3.
| | * | tor-circmgr: If necessary, extend the circuit to become STUB+.Gabriela Moldovan2024-05-131-8/+42
| | | | | | | | | | | | | | | | Closes #1400
| | * | tor-circmgr: Add a helper for extending HsCircStubs by one hop.Gabriela Moldovan2024-05-131-2/+15
| | | | | | | | | | | | | | | | | | | | | | | | We're about to use this in `maybe_extend_stub_circuit` too. Part of #1400