Nick Mathewson
ad47b28f2f
GuardMgr: Split `update_internal` into two functions.
...
The first part changes which guard set is active based on based on
the parameters, which always come from a NetDir; the second changes
the contents of the active guard set, based on a Universe.
2022-11-08 08:10:15 -05:00
Nick Mathewson
95a95076a7
Refactor external guardmgr APIs: Stop taking NetDir arguments.
...
These arguments were used only for legacy (testing) purposes; the
tests now use `TestNetDirProvider`. This lets us simplify our
internal logic for passing a `NetDir` to our samples, and prepare
for having a `BridgeSet` to pass there instead.
This is a breaking change to `guardmgr` and `circmgr`.
2022-11-08 08:10:15 -05:00
Nick Mathewson
339bd8bde0
Mock implementation of a NetDirProvider for testing.
...
I'm about to remove the old testing APIs from GurdMgr that took in a
NetDir in each function: adding this will make that possible.
2022-11-08 08:10:15 -05:00
Nick Mathewson
6b94bc5e4c
Add an accessor for the latest BridgeDescList.
2022-11-08 08:10:15 -05:00
Nick Mathewson
faf51702ac
Implement GuardMgr::install_bridge_desc_provider
2022-11-08 08:10:15 -05:00
Nick Mathewson
5cb9e1987e
Require Send+Sync for BridgeDescProvider
...
We require these for NetDirProvider, so this shouldn't be a big reach.
2022-11-08 08:10:11 -05:00
Ian Jackson
93a150229a
sqlite cache: Document reasoning about timestamps
...
As per
https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/831#note_2851764
2022-11-08 13:00:51 +00:00
Nick Mathewson
897bac680f
linkspec: Rename "maybe rename this?" TODOs in favor of #623
2022-11-07 12:27:50 -05:00
Nick Mathewson
f5364065f3
PtTargetSettings: Enforce correctness at lower level.
...
This resolves a number of TODOs.
2022-11-07 12:21:22 -05:00
Nick Mathewson
06972f171d
Remove a blank line
2022-11-07 12:19:02 -05:00
Nick Mathewson
bc28793166
Downgrade TODO on chan_method
...
This is not something we need to solve for 1.1.0 (and it might not
need to be solved ever).
2022-11-07 11:49:49 -05:00
Nick Mathewson
d448809e49
Merge branch 'hilev_spelling' into 'main'
...
Spelling fixes and normalizations on some high-level crates
See merge request tpo/core/arti!835
2022-11-07 15:48:06 +00:00
Nick Mathewson
b423a40478
Remove TODO about third ChannelMethod variant.
...
We didn't find a use for this.
2022-11-07 10:39:13 -05:00
Nick Mathewson
e832a90c4b
Remove TODO about inlining PtTargetSettings.
...
Since there are (or soon will be) parsing restrictions on this type,
we don't want to inline it as a simple Vec.
2022-11-07 10:36:20 -05:00
Nick Mathewson
b295518a42
Spelling fixes and normalizations on some high-level crates
2022-11-07 10:21:58 -05:00
Ian Jackson
85035c7c5a
bridge desc: Make BridgeDescProvider DynClone
...
This allows the use of Box<dyn BridgeDescProvider> in callers,
since Box<dyn BridgeDescProvider> is now Clone.
2022-11-07 11:56:41 +00:00
Dimitris Apostolou
9c7d1802f5
Fix typos
2022-11-06 06:51:58 +02:00
Ian Jackson
5b66a5e199
bridge desc tests: Test caching and if-modified-since
2022-11-04 19:08:32 +00:00
Ian Jackson
78f7916a88
bridge desc tests: Break out queues_are_empty helper
2022-11-04 19:08:32 +00:00
Ian Jackson
40c21b7d19
bridge desc tests: Provide a sqlite connection
...
The current test case doesn't use this.
2022-11-04 19:08:32 +00:00
Ian Jackson
636bff3193
bridge desc: Implement storage functions at the DB layer
2022-11-04 19:08:32 +00:00
Ian Jackson
6bb2eb9902
bridge desc: Make Downloaded be Debug
2022-11-04 19:08:32 +00:00
Ian Jackson
5bc1d40a2b
bridge desc: Implement cache reuse logic and if-modified-since
...
This introduces the new API functions to Store.
But currently they are all no-ops.
So all this machinery doesn't actually do anything.
Also, it changes the API to the mockable downloader, to allow it to
support if-modified-since. So this isn't used either. But it is more
convenient to do this all at once in BridgeDescManager, since care
needs to be taken about the intraction between if-modified-since and
the persistent cache.
2022-11-04 19:08:32 +00:00
Ian Jackson
279a169031
bridge desc: Rename one more variable to text
2022-11-04 19:02:23 +00:00
Ian Jackson
eaaa61a8e2
bridge desc: Catch panics in the download functionality
2022-11-04 19:02:23 +00:00
Ian Jackson
3f3f27193c
bridge desc: Provide a Store to the bridge desc manager
...
We use the one in the dirmgr. That means that our constructor now has
to take a dirmgr. And, the dirmgr must have a circmgr.
This is all rather odd, TBH.
Add .. to the binding of the return values from setup, as
future-proofing.
The tests now need to provide a Store too. Make the sqlite::new_empty
function pub(crate) so we can use it.
We must retain the _db_tmp_dir, since when it goes away the tmp
directory is deleted and the db goes readonly.
2022-11-04 19:02:23 +00:00
Ian Jackson
1fa9dd62b3
bridge desc tests: Apply tracing_test::traced_test
...
This lets us see the log messages. They look fine, as it happens.
2022-11-04 19:02:23 +00:00
Ian Jackson
9424b0970d
tor-dirmgr: impl AsRef<dyn Error> for Error
...
This allows use with tor_error::Report.
2022-11-04 19:01:24 +00:00
Ian Jackson
f3957a50b6
tor-netdoc: RouterDesc: Add published accessor
...
The bridge descriptor manager is going to want this.
2022-11-04 19:01:24 +00:00
Ian Jackson
dcdd8053b4
dirmgr: Make store be in an Arc
...
This will let us share it with the bridge descriptor manager.
(As discussed with Nick.)
2022-11-04 19:01:24 +00:00
Ian Jackson
9a285ec4ad
dirmgr sqlite store: Improve schema updates
...
* Centralise applying the schema updates, in a closure
* Make the schema update SQL texts be in an array so we can loop
* Make the version update statement generic, not cloned-and-hacked
This will make it possible to add another schema version without
error-prone conditions etc.
2022-11-04 19:01:24 +00:00
Gabriel de Perthuis
21a3808684
Upgrade to clap 3: replace deprecated functions
...
Also replace Arg::takes_value with Arg::action to configure flags
that don't take parameters vs options that do.
This makes it easy to upgrade to clap 4.
Tested deprecations with:
cargo check --workspace --all-features --features clap/deprecated
2022-11-04 19:28:40 +01:00
Gabriel de Perthuis
bc08ea48f7
Upgrade to clap 3 with minimal changes
...
This removes the last cargo audit override (for the unmaintained
ansi_term).
Don't mark options as required when they have default values:
see <https://github.com/clap-rs/clap/pull/3793 >.
2022-11-04 19:28:38 +01:00
Ian Jackson
bf563f3bdf
bridgedesc: Rename "text" from "output"
...
This was confusing, because it's the output of the donwload, but
nowhere near the output of the whole process. And it's going to
become even less so.
2022-11-03 19:00:47 +00:00
Ian Jackson
17ceae724e
bridgedesc: Make process_document into a free function
...
It deserves this treatment, I think.
2022-11-03 18:59:50 +00:00
Ian Jackson
c7a7ce5c20
bridgedesc: Introduce Downloaded
...
This gives names to things and makes things clearer, and this will be
even more true in a moemnt.
2022-11-03 18:59:50 +00:00
Ian Jackson
d2b31f7796
bridgedesc: download: Break out process_document
...
We're going to want to reuse this for handling cached stuff.
2022-11-03 18:57:40 +00:00
Ian Jackson
6fbf3059cd
bridgedesc: Prepare Mockable trait for if-modified-since
2022-11-03 18:57:40 +00:00
Nick Mathewson
7d079ade3b
Merge branch 'warning' into 'main'
...
tor-guardmgr: use imported WeightThreshold in one place
See merge request tpo/core/arti!825
2022-11-03 16:25:37 +00:00
Ian Jackson
7d6f5d5eab
guardmgr config: Provide bridge information to new and reconfigure
2022-11-03 15:48:07 +00:00
Ian Jackson
aa375e2e09
tor-guardmgr: use imported WeightThreshold in one place
...
Without this, an unused import warning is generated when building
without features.
2022-11-03 15:44:32 +00:00
Ian Jackson
5bc3934fb4
bridges config: Provide uninhabited placeholder
...
This will avoid having to make bridge-related trait features in
GuardMgr conditional, which would be non-additive.
2022-11-03 15:43:41 +00:00
Ian Jackson
3dde9f8a05
bridges config: Check that bridges aren't enabled with no bridges
...
This is the validation which is called for by the documentation.
2022-11-03 15:43:41 +00:00
Ian Jackson
6c64be06a6
guardmgr config: Introduce and require new GuardMgrConfig trait
...
It doesn't seem to me like it makes sense to provide the backward
compatibility here.
2022-11-03 15:43:41 +00:00
Ian Jackson
f50da3efa1
define_accessor_trait: Allow specification of other items
2022-11-03 15:43:41 +00:00
Ian Jackson
64de9f74be
define_accessor_trait: Allow specification of supertraits
2022-11-03 15:43:41 +00:00
Ian Jackson
2bfce54959
guardmgr config: Pass fallback list from config by reference
...
This does involve additional cloning. However, soon it will mean that
we can pass the whole `TorClientConfig` by reference.
2022-11-03 15:43:41 +00:00
Nick Mathewson
1179c39859
Suppress two clippy::large_enum_variant warnings
...
These are newly present on 1.65. We can address them later.
2022-11-03 11:09:51 -04:00
Nick Mathewson
932fe48eaf
Run add_warnings.
2022-11-03 11:06:02 -04:00
eta
c77cecd5b3
Merge branch 'edition-2021' into 'main'
...
set all crate edition to 2021
See merge request tpo/core/arti!822
2022-11-03 14:39:24 +00:00
Ian Jackson
70b420adf8
bridge descriptors tests: Fix flaky test
2022-11-03 11:46:20 +00:00
Ian Jackson
daf7eac60a
bridge descriptors tests: Test set_bridges more thoroughly (fix)
...
The RetryDelays are being triggered for the 2nd time here, so their
timeouts can be longer. We must bump the sleep to make sure we don't
have a flaky test.
2022-11-03 11:37:30 +00:00
Ian Jackson
7a99601721
bridge descriptors: logging: Log addition and removal (fmt)
...
Worsify formatting as demanded by rustfmt.
2022-11-03 11:37:30 +00:00
Ian Jackson
269808336e
bridge descriptors: logging: Log addition and removal
...
This involves breaking the calls to `new_bridges.remove` into a helper
that does the logging.
2022-11-03 11:37:30 +00:00
Ian Jackson
17c766fde4
bridge descriptors: logging: Log download start and outcome
2022-11-03 11:37:30 +00:00
Ian Jackson
1ccd9db9af
bridge descriptors tests: Test set_bridges more thoroughly
...
Prior to the previous commit, set_bridges would malfunction if there
were bridges which where (i) in current (ii) in queued or running
(iii) in the new bridge set.
This test failed then and passes now.
2022-11-03 11:37:30 +00:00
Ian Jackson
4a830e1ac2
bridge descriptors: Rewrite set_bridges
...
This was fundamentally confused and irregular. Now it is more
regular: it does the same things to all the elements of Tracked,
and a simple filtering on current.
This fixes a bug, for which I'm about to add a test case.
2022-11-03 11:37:30 +00:00
Ian Jackson
0571674a64
bridge descriptors tests: Add another couple of test cases
2022-11-03 11:37:30 +00:00
Ian Jackson
6db3403820
bridge descriptors tests: stream_drain_ready returns event count
...
We'll use this in a moment.
2022-11-03 11:37:30 +00:00
Ian Jackson
53c1cf0c6d
bridge descriptors tests: Break out bad_bridge helper function
2022-11-03 11:37:30 +00:00
Ian Jackson
42b1b08fdf
bridge descriptors: Change default max_refetch
...
As per
https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/820#note_2850269
2022-11-03 11:37:30 +00:00
Ian Jackson
2ae8a52371
bridge descriptors: Add clarification about bridge states
2022-11-03 11:37:30 +00:00
Ian Jackson
ad39873782
bridge descriptors: Improve and fix docs for consider_launching
2022-11-03 11:37:30 +00:00
Ian Jackson
d44bc1d0f8
bridge descriptors: Add comments where StateGuard is dropped
2022-11-03 11:37:30 +00:00
Ian Jackson
54e51cdba5
bridge descriptors: Document `changed` and `earliest_timeout` Options
2022-11-03 11:37:30 +00:00
Ian Jackson
fb4ffb76fd
bridge descriptors: Document updates argument to timeout_task
2022-11-03 11:37:30 +00:00
Ian Jackson
48f48841e1
Require derive_more 0.99.3
...
0.99.[012] have a bug https://github.com/JelteF/derive_more/issues/114
which makes the Deref derive for bridgedesc::StateGuard not work
and therefore breaks minimal-versions CI.
It seems simpler to require the newer version everywhere.
2022-11-03 11:37:23 +00:00
Ian Jackson
8eb7c731a2
bridge descriptors: Tests
2022-11-03 11:37:05 +00:00
Ian Jackson
3a185d61df
bridge descriptors: Provide a consistency check function
...
This is really part of the tests, but I put it here so that it can be
compiled-in if someone wants it during debugging.
2022-11-03 11:37:05 +00:00
Ian Jackson
51b4588cc0
bridge descriptors: Provide an implementation of BridgeDescProvider
...
Tests will come in a moment.
2022-11-03 11:37:05 +00:00
Ian Jackson
0fb535ba28
tor-dirclient: Response: Provide into_output_string
...
This is the missing one of the full set. It turns out that I wanted
this rather than the non-consuming output_string.
2022-11-03 11:37:05 +00:00
Ian Jackson
42f9651b8e
Copy tor-netdoc/testdata/routerdesc1.txt into tor-dirmgr
...
This seems better than having tor_netdoc export a `#[cfg(test)]`
public constant.
2022-11-03 11:37:05 +00:00
Nick Mathewson
66f34ee774
Merge branch 'guards_as_bridges_part3' into 'main'
...
GuardMgr: decouple NetDir from guards and sample code.
See merge request tpo/core/arti!815
2022-11-02 12:41:03 +00:00
Nick Mathewson
c2ed381c99
Refactor CandidateStatus API to simplify code in descs.
...
This removes some duplication.
2022-11-02 08:07:32 -04:00
Nick Mathewson
fc0c12510a
GuardMgr: Fix and improve comments based on review.
2022-11-02 08:07:32 -04:00
Nick Mathewson
6828178dec
guardmgr: fix rustdoc references.
2022-11-02 08:07:32 -04:00
Nick Mathewson
08473872ab
guardmgr: Refactor candidate info; add `full_dir_info`
...
Previously we always set `dir_info_missing` to `false` for new
guards, since new guards could only be taken from ones that were
present in the NetDir. But for bridges, we don't download their
info until _after_ we have chosen them as guards.
2022-11-02 08:07:11 -04:00
Nick Mathewson
5867318a35
guardmgr: Implement Universe for bridges.
...
Now we can use a group of bridges as the basis for a sample of
guards.
2022-11-02 08:06:43 -04:00
Nick Mathewson
79dade342a
guardmgr: Universe API should look up by ChanTarget
...
This will be necessary for bridges.
2022-11-02 08:06:43 -04:00
Nick Mathewson
82e9a57012
guardmgr: take sampled guards from Universe.
...
This is a trickier case, since we have to deal with weights.
2022-11-02 08:06:43 -04:00
Nick Mathewson
7733146c8c
guardmgr: Continue porting porting code to use Universe.
...
Two more simple cases that can use Universe instead of Netdir.
2022-11-02 08:06:20 -04:00
Nick Mathewson
fbcacea993
guardmgr: Begin to decouple guards from NetDir.
...
In this and the upcoming commits I'll be changing how guards related
to `NetDir` and to `Relay`. Previously, a guard could only come
from (or be updated from) a `Relay` in a `NetDir`. Soon it will be
able to be built from a bridge as well.
To do this, I'm defining a `Universe` trait (name negotiable) that
represents a set of things that may be guards. I'm going to
continue extending its functionality until there are no more
methods in guard.rs or sample.rs that take `NetDir`.
This commit removes most of the usage of `NetDir` and `Relay` in
`guard.rs`.
2022-11-02 08:05:51 -04:00
Nick Mathewson
b5f498021d
guardmgr: Rename microdescriptor_missing to dir_info_missing
2022-11-02 07:59:56 -04:00
Nick Mathewson
39ea0518ee
guardmgr: Allow guards to be constructed from any ChanTarget.
2022-11-02 07:59:56 -04:00
Nick Mathewson
1cb6ea1e77
guardmgr: Include PtTarget in guards.
...
Use a vector, since we may (someday) want to allow a Guard to have
multiple PtTargets.
2022-11-02 07:59:56 -04:00
Ian Jackson
0489d2d4be
Merge branch 'notify' into 'main'
...
refactor config reload triggering
Closes #562
See merge request tpo/core/arti!819
2022-11-01 13:31:17 +00:00
trinity-1686a
c487de6c46
debounce reload cfg events
2022-11-01 13:42:05 +01:00
trinity-1686a
d29f38603d
set all crate edition to 2021
2022-11-01 00:17:33 +01:00
trinity-1686a
ce886e209f
rename unused field
2022-10-30 12:36:13 +01:00
trinity-1686a
5cf2933d33
update some strings
2022-10-30 12:31:07 +01:00
trinity-1686a
5abddfb579
use iife so we can try! instead of custom error handling
2022-10-30 12:31:07 +01:00
trinity-1686a
66c08c967e
refactor so events always indicate reload
2022-10-30 12:31:07 +01:00
trinity-1686a
749746a609
depends less on notify types
2022-10-30 12:31:07 +01:00
trinity-1686a
e6e064ac8a
remove unused dependancies
2022-10-29 13:29:55 +02:00
Nick Mathewson
29c46d08b5
Merge branch 'guards_as_bridges_part2' into 'main'
...
Use ByRelayIds to hold guards in GuardSet
See merge request tpo/core/arti!808
2022-10-27 21:09:47 +00:00
Nick Mathewson
557a07677e
guardmgr: Rename and clarify of non-persistent-state copy fns
...
These will need a bigger overhaul: see #612 and #611 .
2022-10-27 16:40:35 -04:00
Ian Jackson
4f171acaf7
Clarify fix_consistency
2022-10-27 16:40:35 -04:00
Ian Jackson
7180079112
Clarify what it means to be "an identity" for a primary guard.
2022-10-27 16:40:35 -04:00
Ian Jackson
15d464a929
tor-guardmgr: Add big doc comment about guard id handling
2022-10-27 16:40:35 -04:00
Ian Jackson
4a59d384b6
tor-dirmgr: impl Default for FlagPublisher
2022-10-27 15:57:57 +01:00
Ian Jackson
94325cd456
tor-dirmgr: impl FlagEvent for BridgeDescEvent
2022-10-27 15:57:57 +01:00
Ian Jackson
26a7aa9aa6
BridgeDescProvider: Make BridgeDescEvent repr(u16) and derive traits
...
This will enable us to impl FlagEvent for it.
2022-10-27 15:57:54 +01:00
Ian Jackson
a56efbfdf0
impl Hash for BridgeConfig and various PT information
...
The bridge descriptor manager wants to index data structures by the
BridgeConfig.
2022-10-27 15:57:54 +01:00
Ian Jackson
a89daba1c8
tor-guardmgr: bridges: export BridgeDescError at toplevel
2022-10-27 15:57:54 +01:00
eta
84a2624401
Merge branch 'fuzz_ptmgr_ipc' into 'main'
...
ptmgr: Add a fuzzer for ptmessage.
See merge request tpo/core/arti!814
2022-10-27 14:51:35 +00:00
eta
b3d8f3b5ee
Merge branch 'simpler_quote_skipping' into 'main'
...
ptmgr::ipc: Try an alternate approach to initial quotes.
See merge request tpo/core/arti!813
2022-10-27 14:50:56 +00:00
Ian Jackson
9796d615f8
tor-basic-utils: Provide an implementation of BinaryHeap::retain
...
This is currently nightly-only and is blocked on an unresolved API
question:
https://github.com/rust-lang/rust/issues/71503
2022-10-27 10:46:03 +01:00
Ian Jackson
a59fef00e9
tor-checkable: Make TimerangeBound::dangerously* non-experimental
...
I want one of these for the bridge descriptor downloader, and they
seem reasonable to me.
2022-10-27 10:46:03 +01:00
Nick Mathewson
9f73ddd440
Merge branch 'assert_maxlen' into 'main'
...
tor-cell: Assert data length in Data cells
See merge request tpo/core/arti!800
2022-10-27 01:46:21 +00:00
Nick Mathewson
42fefe021d
ptmgr: Add a fuzzer for ptmessage.
2022-10-26 16:59:48 -04:00
Nick Mathewson
cb7eb3b00d
ptmgr::ipc: Try an alternate approach to initial quotes.
...
This lets us use `chars()` rather than `char_indices()`.
2022-10-26 14:49:24 -04:00
Nick Mathewson
a8b96534be
Merge branch 'dirclient-yaks' into 'main'
...
Misc minor changes to tor-dirclient, for descriptor downloading
See merge request tpo/core/arti!810
2022-10-26 18:43:15 +00:00
eta
a118a639ed
tor-ptmgr/ipc: First cut of pluggable transport spawning
...
The new `ipc` module inside `tor-ptmgr` implements the Pluggable
Transport Specification version 1 (`pt-spec.txt`,
https://gitlab.torproject.org/tpo/core/torspec/-/blob/main/pt-spec.txt ).
This enables module users to spawn pluggable transport binaries inside a
child process asynchronously, and receive structured information about
how to connect to the transports provided by said binaries.
Internally, this is structured as a pure set of serialisers and
deserialisers for the protocol in the specification (in the form of
environment variables, and the PT's stdout), a wrapper to run the PT
binary and enable accessing its output asynchronously, and a user-facing
wrapper that handles ensuring all the requested transports launched
properly.
The included `run-pt` example is an exceedingly minimal wrapper program
that was useful in testing. More tests can and should be added in a
further MR.
closes arti#394; part of arti#69
2022-10-26 16:07:30 +01:00
Ian Jackson
d0492ba189
Merge branch 'redundant_allocation' into 'main'
...
tor-bytes: Avoid redundant allocation
See merge request tpo/core/arti!806
2022-10-26 09:43:13 +00:00
Ian Jackson
a04becf8b4
Merge branch 'flag-event' into 'main'
...
FlagEvent trait: Implement using macros
See merge request tpo/core/arti!804
2022-10-25 19:16:45 +00:00
Ian Jackson
79a6b4d94f
tor-dirclient: impl HasKind for RequestFailedError
2022-10-25 20:12:56 +01:00
Ian Jackson
0b046ad4fb
tor-dirclient: Promise that download only gives RequestFailed
2022-10-25 20:12:56 +01:00
Ian Jackson
b68f7af79b
tor-dirclient::DirResponse: provide output_string
...
This gives callers a nice error type with source and everything.
2022-10-25 20:12:56 +01:00
Ian Jackson
897e472e60
tor-dirclient: Provide RoutersOwnDescRequest
...
This will be used for bridges' descriptors.
2022-10-25 20:12:56 +01:00
Ian Jackson
9c9d82f6b8
Fix clippy false positive
2022-10-25 19:42:41 +01:00
Nick Mathewson
20016df6fa
guardmgr: Use new ambiguity-tolerant contains in state handling
...
This has subtleties; the comments try to explain them.
2022-10-25 11:15:53 -04:00
Nick Mathewson
d65c351b33
guard sample: Change semantics of `contains` to handle ambiguity.
...
This is necessary for the (somewhat undesirable) lookup_ids function
to return an ID that the dirmgr can actually use to report successes
and failures.
As noted, lookup_ids will create problems down the road when we
implement relays. We should refactor it out before then.
2022-10-25 11:15:53 -04:00
Nick Mathewson
28f2e2997e
Replace contains_relay with can_add_relay().
...
To see if we can add a relay as a guard, we need a conservative
test: any IDs in common with the given relay prevent us from adding
it.
2022-10-25 11:15:53 -04:00
Nick Mathewson
3a994c32dc
Convert guard samples to use ByRelayIds.
...
This required a number of changes, which I've tried to document.
I've taken a conservative approach to modification, and I'm not
using any of the by_*_mut() functions (yet). For cases which
potentially modify the whole set, I'm using into_values() and
collect() to ensure that it's re-indexed correctly, even though the
identities don't change.
I introduce some "TODO pt-client" comments here which I will resolve
in the next commit(s).
2022-10-25 11:15:53 -04:00
Ian Jackson
f7e5892e40
BridgeDescEvent: Change the sole variant to SomethingChanged
...
And explain what this all means.
2022-10-25 15:32:56 +01:00
Emil Engler
362d822ee4
tor-bytes: Avoid redundant allocation
...
See c489e1d911
2022-10-25 16:24:42 +02:00
Nick Mathewson
8528d61a78
impl HasRelayIds for GuardId.
2022-10-25 09:23:28 -04:00
Nick Mathewson
7d313a12bc
ByRelayIds: Add additional accessor functions.
...
These are the ones that turned out to be necessary while converting
guard samples to use ByRelayIds.
2022-10-25 09:23:28 -04:00
Nick Mathewson
ac71bb0ef1
linkspec: add HasRelayIds::has_any_identity.
2022-10-25 09:23:28 -04:00
Nick Mathewson
49ffb1cf4b
Merge branch 'safe_u16_conversion' into 'main'
...
tor-cell: Consistent and secure conversion to u16
See merge request tpo/core/arti!803
2022-10-25 13:17:55 +00:00
Nick Mathewson
49f0521904
Merge branch 'rename_for_to_from' into 'main'
...
tor-cell: Rename for_client and for_relay
See merge request tpo/core/arti!793
2022-10-25 11:53:57 +00:00
Nick Mathewson
303727081b
Merge branch 'feat/add-semvermd-tor-cell' into 'main'
...
Add semver.md in tor-cell for MR#793
See merge request tpo/core/arti!798
2022-10-25 11:53:48 +00:00
breezykermo
f177f8a02b
Add semver.md in tor-cell for MR#793
2022-10-25 11:53:48 +00:00
eta
378a4999ad
Merge branch 'fix_typos' into 'main'
...
tor-cell: Fix typos in msg.rs
See merge request tpo/core/arti!802
2022-10-25 10:36:07 +00:00
eta
26ff63f985
Merge branch 'explain_magic' into 'main'
...
tor-cell: Add comment explaing Data::MAXLEN
See merge request tpo/core/arti!801
2022-10-25 10:35:56 +00:00
Ian Jackson
9a175ee323
FlagEvent trait: Implement using macros
...
The explicit list of variant names, that needs to be kept in sync, and
is a test failure semver break hazard, is now gone.
All the necessary code is now generated automatically, and cannot be
wrong.
I want this because I find myself wanting to add a second
implementation of FlagEvent, for another type.
2022-10-25 10:33:28 +01:00
Ian Jackson
f2a08a15cd
tor-error: Tidy up use of thiserror::Error
...
1. Import it, as we do elsewhere, and use that import.
2. Use thiserror to generate the Display impl, rather than
derive_more, as we do for errors elsewhere.
(tor_error still needs derive_more::Display for ErrorKind.)
2022-10-24 19:38:46 +01:00
Ian Jackson
d7783dd956
tor-error: Rename truncated module to misc
...
This has no external API change, but makes space for other
miscellaneous errors to arrive later.
2022-10-24 19:38:46 +01:00
Nick Mathewson
40ec12b0cb
Merge branch 'guards_as_bridges_part1' into 'main'
...
Allow GuardMgr to expose bridges as guards (part 1)
See merge request tpo/core/arti!785
2022-10-24 13:30:02 +00:00
Nick Mathewson
c4263543d4
circmgr: More NOTEs and TODO pt-clients.
2022-10-24 08:59:12 -04:00
Nick Mathewson
d7672a13d5
linkspec: specify sort order for HasRelayIds.
2022-10-24 08:59:12 -04:00
Nick Mathewson
103c88dd95
Circmgr: construct paths using either Relay or OwnedCircTarget
...
Previously we could only use Relay for this case, which won't work
any more: a Bridge is not a `tor_netdir::Relay`. Instead we allow
the GuardMgr to give us something that knows how to convert itself
into an OwnedCircTarget.
This change required a far amount of follow-on revisions and
refactoring, but it should all be internal to the path-building
logic.
2022-10-24 08:59:12 -04:00
Nick Mathewson
47cd5c97da
netdir: Expose addrs-in-same-subnets calculation from SubnetConfig
...
Previously this was a private method only visible from Relay, but now
we can use it on any two HasAddrs objects.
2022-10-24 08:59:12 -04:00
Nick Mathewson
1195c40a99
linkspec: Remove now-useless declared_peer_addr
...
The singleton variation here is almost never what we want.
2022-10-24 08:59:12 -04:00
Nick Mathewson
bb117a4bd4
guardmgr: Refactor the interior of FirstHop.
...
Now it contains either an `OwnedChanTarget` or an `OwnedCircTarget`,
which will let `GuardMgr` return bridges that can be used to make
circuits.
As part of this change, it was necessary to revise some
address-modification functions that applied to filters and
`OwnedChanTarget`. Now they do the smart thing, and remove only the
address that are in the `ChanMethod`. This means that the addresses
from HasAddrs are still accurate about which addresses the relay
"has".
2022-10-24 08:59:12 -04:00
Emil Engler
05cad9f6d7
tor-cell: Add comment explaing Data::MAXLEN
...
This commit adds a comment explaining composition of the magic number
"11" found in the assignment of the Data::MAXLEN constant.
2022-10-24 14:46:32 +02:00
Emil Engler
cc8b9e446f
tor-cell: Fix typos in msg.rs
2022-10-24 14:45:48 +02:00
Emil Engler
c42a55d515
tor-cell: Consistent and secure conversion to u16
...
This commit improves the overflow protection of one call to
Vec::write_u16(), by replacing the cast conversion from self.sig.len()
with a call to u16::try_from(), like it is already done in the rest of
the accompanying function.
2022-10-24 14:40:51 +02:00
Nick Mathewson
b5e96c3414
Merge branch 'by_ids_mutate' into 'main'
...
Add two ways to change entries in an n_key_set
See merge request tpo/core/arti!797
2022-10-24 12:36:30 +00:00
Nick Mathewson
15ac14a5d9
n_key_set: clean up some wide lines
2022-10-24 08:08:56 -04:00
Nick Mathewson
ef1c0cd282
n_key_set: Re-insert by_foo_mut() accessors, but make them unsafe.
2022-10-24 08:04:02 -04:00
Nick Mathewson
d648446201
Fix some litter in a doc comment.
2022-10-24 07:59:42 -04:00
Nick Mathewson
24e62d3197
n_key_set: Add ability to modify entries in the map.
...
The keys can change: if they do, then the entry is removed from its
previous position and inserted at the new one, possibly displacing
others.
2022-10-24 07:58:45 -04:00
Emil Engler
fb2195b0cf
tor-cell: Assert data length in Data cells
...
This commit adds a `debug_assert!` macro into the `new_unchecked()`
function of the Data cell. Beside this, it also fixes a misleading
comment regarding that limit.
2022-10-24 13:33:24 +02:00
eta
b031616b5f
Merge branch 'fix_typos' into 'main'
...
tor-cell: Fix typos in msg.rs
See merge request tpo/core/arti!788
2022-10-21 20:21:28 +00:00
eta
533ff7bda2
Merge branch 'remove_redundant' into 'main'
...
tor-cell: Remove redundant match clauses
See merge request tpo/core/arti!792
2022-10-21 20:17:37 +00:00
eta
81525c345a
Merge branch 'concrete_comments' into 'main'
...
tor-cell: Make historical comments more concrete
See merge request tpo/core/arti!787
2022-10-21 20:16:27 +00:00
eta
15d8ee715a
Merge branch 'circmgr' into 'main'
...
tor-circmgr make get_or_launch_dir_specific depend on specific-relay feature
See merge request tpo/core/arti!795
2022-10-21 20:14:44 +00:00
Ian Jackson
a4e65d38e1
Merge branch 'no_redundant_copy' into 'main'
...
tor-cell: Avoid redundant pointer copy
See merge request tpo/core/arti!791
2022-10-21 17:51:25 +00:00
Ian Jackson
0924fb3623
tor-guardmgr: descs: Make BridgeDescError DynClone
2022-10-21 16:22:17 +01:00
Ian Jackson
f4ec3e6cec
tor-guardmgr: descs: Make BridgeDescError into a trait
2022-10-21 16:22:13 +01:00
Ian Jackson
77ddddb1f8
tor-error: make HasRetryTime object-safe
...
We could in the future provide a version of abs_retry_time which took
an &dyn closure if that turns out to be wanted.
I think this isn't a semver break because trait implementors are
allowed to relax bounds.
2022-10-21 16:08:48 +01:00
Ian Jackson
a30e42a740
tor-circmgr: Make get_or_launch_dir_specific feature-specific
2022-10-21 15:19:18 +01:00
Ian Jackson
6806180ce1
tor-circmgr: Rename get_or_launch_dir_specific from _bridge
...
DirSpecificTarget in the usage was renamed apropos an MR comment but
this function name was overlooked.
2022-10-21 15:19:18 +01:00
Ian Jackson
2ccf8a1b5b
tor-chanmgr: Suppress an unused imports warning for `use super::*`
...
If pt-client is disabled, there are in fact no tests, so the module is
empty. But we would always want `use super::*` here.
2022-10-21 15:19:05 +01:00
Ian Jackson
aa3cd7a97c
tor-circmgr README: Add experimental features boilerplate
2022-10-21 15:18:41 +01:00
Ian Jackson
ea7f31b357
tor-circmgr README: Remove "Limitations"
...
This doesn't make sense now we've released Arti 1.0. The version
number is enough I think.
2022-10-21 15:18:41 +01:00
Ian Jackson
f68591b923
tor-dirmgr README: Remove some redundant/duplicated headings
2022-10-21 15:18:41 +01:00
Nick Mathewson
fa1d2f453a
guardmgr: Hold FallbackDir in fallback::set::Entry
...
This resolves an old TODO, and will simplify our work a little.
2022-10-21 09:21:43 -04:00
Nick Mathewson
00f887db70
linkspec: Add compare-by-relay-ids function to HasRelayIds
2022-10-21 09:21:43 -04:00
Nick Mathewson
19fdf196d8
guardmgr: Add bridges sample, encode sample ID in FirstHopId.
...
The most important part of this commit is to make sure that each
`FirstHopId` includes the `GuardSetSelector` from which the guard
was selected. Doing this lets us be certain that when we report
that a guard has succeeded or failed, we're reporting it in the
right context.
Additionally, this commit uses strum to make an iterator over the
samples, so that we can make sure that our "for each sample" code is
robust against future changes, and we don't miss the bridge sample.
2022-10-21 09:21:43 -04:00
Nick Mathewson
fe6ac2d9ed
Merge branch 'whoops_unused_imports' into 'main'
...
Oops: Mark some imports as pt-client only.
See merge request tpo/core/arti!794
2022-10-21 13:15:22 +00:00
Nick Mathewson
e0c1928ea0
Merge branch 'matrix-features' into 'main'
...
add checks for many feature combinations
Closes #303
See merge request tpo/core/arti!775
2022-10-21 12:57:36 +00:00
Nick Mathewson
1e4b1f6433
Oops: Mark some imports as pt-client only.
...
This causes CI problems, and is entirely my fault.
2022-10-21 08:32:02 -04:00
Nick Mathewson
a12667e077
Merge branch 'no_redundant_allocation' into 'main'
...
tor-cell: Avoid redundant allocation
See merge request tpo/core/arti!790
2022-10-21 12:18:49 +00:00
Emil Engler
169ed860c2
tor-cell: Avoid redundant pointer copy
...
This commit changes an iteration by copying a u16 (which is 2 bytes)
instead of a pointer address, which is most likely 8 bytes on most
machines.
2022-10-21 13:26:00 +02:00
Emil Engler
c489e1d911
tor-cell: Avoid redundant allocation
...
This commit changes the way how a vector with a known sized gets
allocated, by using Vec::with_capacity() instead of Vec::new().
It will eventually avoid an allocation of more memory than required.
2022-10-21 13:25:26 +02:00
Emil Engler
e5429a2891
tor-cell: Rename for_client and for_relay
...
This commit renames the for_client and for_relay functions to
from_client and from_relay respectively, in order to indicate their
origin, as the term "for" is more likely to indicate a destination,
which is not true in that situation.
2022-10-21 13:21:52 +02:00
Emil Engler
17759799f1
tor-cell: Remove redundant match clauses
...
This commit removes two redundant match clauses inside the
take_one_netinfo_addr function found inside msg.rs.
2022-10-21 13:17:43 +02:00
Emil Engler
f423721cc3
tor-cell: Rename fixed_len to fixed_len_handshake
...
This commit renames the fixed_len! macro to fixed_len_handshake!, in
order to indicate, that this macro is only suited for cells with
commands related to handshaking.
2022-10-21 13:14:50 +02:00
Emil Engler
247cc37290
tor-cell: Fix typos in msg.rs
2022-10-21 13:10:30 +02:00
Emil Engler
7e04de6d96
tor-cell: Make historical comments more concrete
...
This commit extends comments that make references to historical protocol
versions of Tor, by adding the concrete protocol version numbers.
2022-10-21 12:59:26 +02:00
Ian Jackson
db2ce541fb
Merge branch 'dirclient-errors' into 'main'
...
Make DirResponse API not an error handling footgun
See merge request tpo/core/arti!782
2022-10-20 17:30:01 +00:00
Nick Mathewson
f23adcd4c8
Merge branch 'pt-serde' into 'main'
...
serde support for PtTarget
See merge request tpo/core/arti!780
2022-10-20 17:13:19 +00:00
Nick Mathewson
608153cd93
Merge branch 'connect-via-proxy' into 'main'
...
Implement a TransportHelper to connect via a SOCKS-based pluggable transport
See merge request tpo/core/arti!776
2022-10-20 16:44:58 +00:00
Nick Mathewson
34aa352d16
Implement serde for PtTarget and its members.
...
This will let us remember bridges that use pluggable transports.
2022-10-20 12:37:41 -04:00
Nick Mathewson
bc09a3fe65
Inline now-needless variant constructors for PtTargetAddr
2022-10-20 12:37:41 -04:00
Nick Mathewson
95b03dc96f
Remove a now-needless `allow(dead_code)`
2022-10-20 12:37:41 -04:00
Nick Mathewson
d8f9a79c4f
linkspec: Always expose PT-related types.
...
The `PtTarget` type and its contents (`TransportName`,
`PtTargetAddr`, `PtSettings`) are now unconditionally compiled and
exposed. This will allow us to serialize and deserialize them in
our guard-state files even when we have been built without explicit
PT support.
The `pt-client` feature controls whether `TransportName` is a
variant of `TransportId`, and whether `PtTarget` is a variant of
`ChanMethod`: this in turn means that we'll still have simpler
binary code and smaller structures when we're building without PT
support (which is what we wanted when we initially made these types
conditional).
2022-10-20 12:37:40 -04:00
Ian Jackson
7b2a0fbcb1
tor-dirclient: Provide fallible DirResponse::output and into_output
2022-10-20 17:24:53 +01:00
Ian Jackson
da3351ad49
tor-dirclient: Make DirResponse be Clone
...
I want this for testing. It seems friendly to provide it, though.
2022-10-20 17:24:53 +01:00
Ian Jackson
b3675c76dc
tor-dirclient: Introduce RequestError:HttpStatus
2022-10-20 17:24:53 +01:00
Ian Jackson
e8d662ed7c
tor-dirclient: Make RequestFailed its own error type (rustfmt)
...
Split off to assist review.
2022-10-20 17:24:53 +01:00
Ian Jackson
d9375b2b8d
tor-dirclient: Make RequestFailed its own error type
...
We're going to have functions on Response that fail by returning only
one of these.
Sadly this diff is quite noisy.
2022-10-20 17:24:53 +01:00
Ian Jackson
3b1af05851
tor-dirclient Response: Rename output methods
...
These don't check errors and are therefore quite hazardous.
I'm going to introduce a more cooked version in a moment.
2022-10-20 17:24:50 +01:00
Ian Jackson
803131c1ea
Merge branch 'bridge-internal-apis' into 'main'
...
Use BridgeConfig to identify bridges in two places
See merge request tpo/core/arti!781
2022-10-20 16:14:14 +00:00
Ian Jackson
9c7ea41322
impl ChanTarget etc. for BridgeConfig
2022-10-20 14:16:34 +01:00
Ian Jackson
6193bed788
impl HasAddrs for PtChannelAddr and ChannelMethod
2022-10-20 14:16:34 +01:00
Ian Jackson
c93500e14c
tor-linkspec: impl From<&ChanTarget> for OwnedChanTarget
...
This lets us write functions which can either take an existing
owned OwnedChanTarget, or copy out of some other kind of ChanTarget
passed by reference.
2022-10-20 13:29:07 +01:00
Ian Jackson
ef5e60c879
circmgr: Plumbing for direct to target directory circuits
...
The target is identified by Into<OwnedChanTarget>.
We introduce corresponding TargetCircUsage and SupportedCircUsage.
2022-10-20 13:28:30 +01:00