| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
|
| |
This was addressed a while ago, in
09a601aed9aac9effa230701b02ba865b5754469
|
| |
|
|
|
|
|
|
| |
If we reach this point and the join point is `None`, it means the
conflux set has so far consisted of a single leg. This means we need to
assign the last hop of the (only) leg to the join point. This initial
leg is in `self.circuits`, not in `legs` (`legs` is the list of *new*
legs that are being added to the set).
|
| | |
|
| |
|
|
| |
This will be needed for logging purposes.
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
| |
`num_legs` keeps track of the number of legs that have an in-progress
conflux handshake.
This updates the calculation to count the "initial" leg of the tunnel
too (because when converting a single-path reactor to a multi-path one,
the existing, "initial" circuit needs to complete the conflux handshake
too).
|
| |
|
|
|
| |
If we don't make an exception for LINK cells, we'll never be able to
send them, and the circuits will be forever "pending conflux handshake".
|
| |
|
|
|
|
| |
This fixes a bug where we'd fail to set the `ConfluxMsgHandler` for the
initial leg of the `ConfluxSet`, when converting the set from a
single-path set to a multi-path one.
|
| |
|
|
|
|
| |
As per the replacement rules from prop354. Except we can't actually
enforce the replacement rules at this level (they'll have to be enforced
by the caller).
|
| | |
|
| |
|
|
|
| |
We need to eventually tackle all of these, but none of them are
critical, so I propose we downgrade them to `TODO`.
|
| |
|
|
|
|
|
|
| |
I really dislike that we're exposing the stream map this way. Ideally
we'd have some way of sharing the stream maps without exposing
the `StreamMap` in `reactor::conflux`.
Closes #2011
|
| | |
|
| | |
|
| | |
|
| |
|
|
| |
Most of this is code motion, I recommend reviewing with `--color-moved`.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
This helps hide the `CircHop` internals, and is the first step towards
providing a safer API that aims to reduce contention and prevent
deadlocking on the stream map mutex.
This change is also in preparation for implementing special handling for
the join point of a conflux tunnel (which will involve adding a new
`CircHop` API for sharing the stream map of another `CircHop`).
I recommend reviewing this diff with `--color-moved`.
|
| | |
|
| |
|
|
|
|
|
| |
When negotiation won't occur, we need to represent the fact by
disabling any settings that would depend on negotiation.
Otherwise we'll wind up with the client thinking everything
was supported, and the relay thinking that nothing is.
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
| |
The fallback CC algorithm is _always_ fixed-window, and we should only
use it when the selected CC algorithm is not supported.
|
| |
|
|
|
|
|
|
|
| |
Now tor-circmgr no longer needs to check which Protover capabilities
are enabled, or construct a separate CircParameters for each hop.
Instead, tor-proto decides whether to use the fallback CC mode,
based on whether the target supports FLOWCTRL_CC.
Closes #1967.
|
| |
|
|
|
|
| |
We will construct this object based on the circuit parameters _and_
on the target's supported protocol versions, so we need to do so
when we have both pieces of info.
|
| |
|
|
|
|
|
|
|
|
|
| |
One type will now represent _the kind of hop we are asking
tor-proto to negotiate_; the other will represent
_the state of such negotiation_.
This doesn't simplify the code much yet, but it will be helpful
as we add more and more negotiable settings.
Part of #1967
|
| | |
|
| |
|
|
|
|
| |
Previously it did not behave correctly when `bucket.max()` was 0 (it
would sleep for 0 time instead of infinitely, triggering a debug
assertion).
|
| | |
|
| | |
|
| |
|
|
| |
The token bucket is now refilled before changing the rate.
|
| | |
|
| | |
|
| |
|
|
| |
The user now sets a constant amount of bytes to wait for.
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
| |
Unfortunately the git diff thinks I moved the struct, but I really only
moved the comment.
|
| |
|
|
|
| |
`DataWriter` -> `DataWriterInner`
`DataWriterNew` -> `DataWriter`
|
| | |
|
| | |
|
| | |
|
| |
|
|
| |
Closes #1969.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
Apparently clippy nightly is better (or worse?) about detecting
complex functions than before, so I'm suppressing these warnings
where they occur.
I have mixed feelings about these warnings: On the plus side,
they really do help to detect functions that are twistier than they
need to be. On the minus side, they get confused by tracing macros,
and the "allows" do pile up. But on the plus side, those "allows"
do provide a way to find functions that need to be refactored,
and they are never uglier than the functions they decorate.
|
| |
|
|
|
| |
There's already a check right above the TODO that does what the TODO
asks.
|