| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| | | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
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.
|
| | | |
| | |
| | |
| | |
| | |
| | |
| | | |
In particular, clarify that dropping the DataWriter on its own does
nothing unless the DataReader is also dropped.
Related to #1368.
|
| |/ /
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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!
|
| |\ \
| | |
| | |
| | |
| | | |
Proto: Refactor Channel to always be Arc.
See merge request tpo/core/arti!2163
|
| | | | |
|
| | | | |
|
| | | | |
|
| | | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
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.
|
| | | | |
|
| | | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
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.
|
| | | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
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.
|
| | | | |
|
| | | |
| | |
| | |
| | |
| | | |
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.
|
| |/ /
| |
| |
| |
| |
| | |
(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.)
|
| |\ \
| | |
| | |
| | |
| | |
| | |
| | | |
Allow RPC methods with non-serializable types
Closes #1403
See merge request tpo/core/arti!2152
|
| | | | |
|
| | | |
| | |
| | |
| | |
| | | |
We need to do this so that we can actually invoke RPC functions
from one another.
|
| | | | |
|
| | | | |
|
| | | |
| | |
| | |
| | |
| | | |
Now that Method::Error exists, we can downcast Any to the actual
function's return type.
|
| | | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
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.
|
| | | |
| | |
| | |
| | | |
A @special invoker does not get an RPC entry.
|
| | | |
| | |
| | |
| | |
| | | |
Now Methods can return anything; and only if their outputs are
Serialize will they implement RpcInvocable.
|
| | | |
| | |
| | |
| | |
| | | |
RpcInvocable will only be implemented on types whose output
can be serialized.
|
| | | |
| | |
| | |
| | | |
This is part of work on #1403.
|
| | | |
| | |
| | |
| | |
| | |
| | | |
This will allow us to create dispatchable methods that are only
invoked from inside the arti code, and are not themselves
serializable.
|
| |\ \ \
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
tor-circmgr: Replace STUB/STUB+ terminology with SHORT/EXTENDED.
Closes #1339
See merge request tpo/core/arti!2161
|
| | | | | |
|
| | | | | |
|
| | | | | |
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
The previous STUB/STUB+ terminology was confusing, because STUB and
STUB+ are both "circuit stubs" (but STUB is shorter than STUB+).
Closes #1339
|
| | | | |
| | | |
| | | |
| | | | |
Part of #1339
|
| |\ \ \ \
| |_|/ /
|/| | |
| | | |
| | | | |
proto: Explicitly enforce maxima on SENDME windows.
See merge request tpo/core/arti!2150
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
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.
|
| |\ \ \ \
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
RPC: Enforce method name format.
Closes #823
See merge request tpo/core/arti!2149
|
| | | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
(We don't give an error about unrecognized namespaces (for now),
since we have no way to opt in to them.)
|
| | | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
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.
|
| | |/ / /
| | | |
| | | |
| | | |
| | | | |
Specifically, we want a single colon, and we want our
method names to be in snake_case.
|
| |\ \ \ \
| |_|/ /
|/| | |
| | | |
| | | | |
doc: Use locked build
See merge request tpo/core/arti!2157
|
| | | | | |
|
| |\| | | |
|
| | | |/
| |/|
| | |
| | | |
Co-authored-by: gabi-250 <[email protected]>
|
| | |\ \
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
tor-circmgr: If necessary, extend the circuit to become STUB+.
Closes #1400 and #1409
See merge request tpo/core/arti!2145
|
| | | | | |
|
| | | | | |
|
| | | | |
| | | |
| | | |
| | | | |
We will soon need to reuse this.
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
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.
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
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.
|
| | | | |
| | | |
| | | |
| | | | |
Closes #1400
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
We're about to use this in `maybe_extend_stub_circuit` too.
Part of #1400
|