| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| | | | |
|
| | | | |
|
| | | | |
|
| | | | |
|
| | | | |
|
| | | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
The current cancel code is prone to deadlock, so the easiest way to
solve it appears to be making cancel requests themselves
uncancellable.
I've included a test to verify the behavior; previously, this test
caused a deadlock.
|
| | | | |
|
| | | | |
|
| | | |
| | |
| | |
| | |
| | |
| | |
| | | |
Nothing used it, and it has some semantic complexity.
(see
https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/2722#note_3149591
)
|
| | | |
| | |
| | |
| | |
| | |
| | | |
The Waker::clone_from implementation uses Waker::will_wake
to avoid unnecessarily cloning a Waker that it already
has a copy of.
|
| | | | |
|
| | | | |
|
| | | |
| | |
| | |
| | |
| | |
| | |
| | | |
I hope that this limitation is acceptable;
the alternative involves some significant refactoring to give
Request a Weak reference to RpcConn -- but RpcConn isn't currently
kept in an Arc<> at all, and so we'd need some fairly heavy hacking.
|
| | | | |
|
| | | | |
|
| | | | |
|
| | | | |
|
| | | | |
|
| | | | |
|
| | | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Cancellation is now fallable, which allows us to detect attempts
to cancel which cannot work.
We now guarantee that when you try to cancel a `Cancel<F>` future,
either the cancel operation will succeed, or the future will return
(or will have already returned) Ok(), but not both, and not neither.
Closes #818.
|
| |\ \ \
| |_|/
|/| |
| | |
| | |
| | |
| | | |
rpclib: Rename params/reply structs for consistency.
Closes #1586
See merge request tpo/core/arti!2729
|
| |/ /
| |
| |
| |
| |
| |
| |
| | |
Our now convention here in rpclib is that a struct holding a
request's parameters is called `FooParams`, and a struct holding
that request's reply is called `FooReply`.
Closes #1586
|
| |\ \
| | |
| | |
| | |
| | | |
Better instructions for handling new MPL dependencies
See merge request tpo/core/arti!2726
|
| | | | |
|
| |/ / |
|
| |\ \
| | |
| | |
| | |
| | | |
Update `service-side-pow.md`
See merge request tpo/core/arti!2701
|
| | | | |
|
| | | | |
|
| | | |
| | |
| | |
| | | |
Now that it's not in a Arc internally it shouldn't have this.
|
| | | | |
|
| | | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Per review feedback:
> We have discovered that as a general rule of thumb, it is a good idea
> to expose the `Arc`. This has a number of advantages; for example, if a
> caller wants a `Weak` for any reason, that's right there. The typical
> pattern is for the constructor to return `Arc<Self>` and methods to take
> `self: &Arc<Self>`.
|
| | | |
| | |
| | |
| | |
| | |
| | | |
This is something we wanted to do in general for security reasons, and
ad I was implementing I discovered that it actually makes the code
simpler, rather than more complicated.
|
| | | | |
|
| | | |
| | |
| | |
| | |
| | | |
These are needed to allow the PowManager to get the blinded ID needed to
construct a PoW verifier.
|
| | | | |
|
| |/ /
| |
| |
| | |
It is cleaner to not force callers to wrap it.
|
| |\ \
| | |
| | |
| | |
| | | |
tor-proto: Replace sleep() in test with advance_until_stalled().
See merge request tpo/core/arti!2721
|
| | | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
This test spuriously failed on my !2720 branch
(https://gitlab.torproject.org/gabi-250/arti/-/jobs/811495):
```
failures:
---- circuit::test::invalid_circ_sendme stdout ----
E tor_proto::channel::reactor: UniqId(71): Running reactor
E tor_proto::circuit::reactor: Circ 23.17: Running circuit reactor
E tor_proto::circuit::reactor: Circ 23.17: reactor received AddFakeHop { relay_cell_format: V0, fwd_lasthop: false, rev_lasthop: false, params: CircParameters { extend_by_ed25519_id: true, ccontrol: CongestionControlParams { alg: FixedWindow(FixedWindowParams { circ_window_start: 1000, circ_window_min: 100, circ_window_max: 1000 }), cwnd_params: CongestionWindowParams { cwnd_init: 124, cwnd_inc_pct_ss: Percentage { value: 100 }, cwnd_inc: 1, cwnd_inc_rate: 31, cwnd_min: 124, cwnd_max: 4294967295, sendme_inc: 31 }, rtt_params: RoundTripEstimatorParams { ewma_cwnd_pct: Percentage { value: 50 }, ewma_max: 10, ewma_ss_max: 2, rtt_reset_pct: Percentage { value: 100 } } } }, done: Sender { complete: false } }
E tor_proto::circuit::reactor: Circ 23.17: reactor received AddFakeHop { relay_cell_format: V0, fwd_lasthop: true, rev_lasthop: true, params: CircParameters { extend_by_ed25519_id: true, ccontrol: CongestionControlParams { alg: FixedWindow(FixedWindowParams { circ_window_start: 1000, circ_window_min: 100, circ_window_max: 1000 }), cwnd_params: CongestionWindowParams { cwnd_init: 124, cwnd_inc_pct_ss: Percentage { value: 100 }, cwnd_inc: 1, cwnd_inc_rate: 31, cwnd_min: 124, cwnd_max: 4294967295, sendme_inc: 31 }, rtt_params: RoundTripEstimatorParams { ewma_cwnd_pct: Percentage { value: 50 }, ewma_max: 10, ewma_ss_max: 2, rtt_reset_pct: Percentage { value: 100 } } } }, done: Sender { complete: false } }
E tor_proto::circuit::reactor: Circ 23.17: reactor received BeginStream { hop_num: HopNum(2), message: Begin(Begin { addr: [119, 119, 119, 46, 101, 120, 97, 109, 112, 108, 101, 46, 99, 111, 109], port: 443, flags: BeginFlags(IPV6_OKAY) }), sender: Sender { tx: Sender { closed: false }, mq: TypedParticipation(Participation(Noop)) }, rx: Receiver { inner: ReceiverInner { state: Mutex { data: Ok(ReceiverState { rx: StreamUnobtrusivePeeker { buffered: None, poll_waker: None, inner: Some(Receiver { closed: false }) }, mq: TypedParticipation(Participation(Noop)), collapse_callbacks: 0 }), poisoned: false, .. } } }, done: Sender { complete: false }, cmd_checker: DataCmdChecker { expecting_connected: true } }
Using RNG seed ARTI_TEST_PRNG=62d085c0fb1213c4f41d1a0a5c3f92dd10223a27c42bfda3caedfe60e011e95d
E tor_proto::circuit::reactor: Circ 23.17: handling cell: Relay(Relay { body: .. })
Using RNG seed ARTI_TEST_PRNG=fd2f2f045a7340f1189972b13645346943efa2c42f43afd2161420c692bb4ff0
E tor_proto::circuit::reactor: Circ 23.17: handling cell: Relay(Relay { body: .. })
E tor_proto::circuit::reactor: Circ 23.17: Circuit reactor stopped: Err(CircProto("Mismatched tag on circuit SENDME"))
E tor_proto::channel::reactor: UniqId(71): reactor received CloseCircuit(CircId(128))
E tor_proto::channel::reactor: UniqId(71): Circuit 128 is gone; sending DESTROY
thread 'circuit::test::invalid_circ_sendme' panicked at crates/tor-proto/src/circuit.rs:2262:21:
reactor continued running after invalid sendme
failures:
circuit::test::invalid_circ_sendme
test result: FAILED. 142 passed; 1 failed; 1 ignored; 0 measured; 0 filtered out; finished in 4.93s
```
This is probably because of the `sleep()`-based check. This branch
changes the test to use `MockRuntime`, replacing the `sleep()` with
`advance_until_stalled()`.
|
| |\ \ \
| |_|/
|/| |
| | |
| | | |
tor-proto: Light run_once() refactoring
See merge request tpo/core/arti!2720
|
| | | |
| | |
| | |
| | |
| | |
| | | |
The more concise name makes the code a bit more readable, IMO (and it's
consistent with the `Result` type-aliasing style we've been using in the
rest of the codebase).
|
| | | |
| | |
| | |
| | | |
It's not needed because `CircHop` is defined in the same file.
|
| | | |
| | |
| | |
| | | |
No functional changes, just `cargo fmt`.
|
| |/ /
| |
| |
| |
| |
| |
| |
| |
| | |
This is mostly code motion in preparation for refactoring `run_once()`
to use `select!` instead of the hand-rolled `poll_fn` impl.
Note: the code here is intentionally mis-indented, to simplify diffing
(I recommend using `git diff --color-moved`). A future commit will fix
the indentation.
|
| |\ \
| |/
|/|
| |
| |
| |
| | |
arti: Add `restricted-discovery` to the list of experimental features.
Closes #1808
See merge request tpo/core/arti!2719
|
| | |
| |
| |
| |
| |
| |
| | |
Note: there are other experimental features we might want to document
here (possibly after we settle the discussion from #1706?)
Closes #1808
|
| |\ \
| | |
| | |
| | |
| | | |
Implement congestion control from prop324
See merge request tpo/core/arti!2675
|
| | | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Without circuit negotiation and flow control (XON/XOFF), the Vegas
algorithm can not be used.
Temporarily, this commit pins the algorithm to fixed window until we
have the above.
Signed-off-by: David Goulet <[email protected]>
|
| | | |
| | |
| | |
| | | |
Signed-off-by: David Goulet <[email protected]>
|
| | | |
| | |
| | |
| | |
| | |
| | | |
Both in tor-proto and tor-circmgr.
Signed-off-by: David Goulet <[email protected]>
|
| | | |
| | |
| | |
| | | |
Signed-off-by: David Goulet <[email protected]>
|