summaryrefslogtreecommitdiff
path: root/crates
Commit message (Collapse)AuthorAgeFilesLines
...
* | chanmgr: replace the HashMap<> with a ByRelayIds.Nick Mathewson2022-10-184-312/+312
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is necessary so that we can look up channels (open and pending) by all of the Ids that we know about them. The operations needed here are pretty complex: to get them right, I've replaced most of the accessors on the inner `ChannelMap` with a function that holds the lock while another `FnOnce` is called. This still gets us the invariant that we can't accidentally await while holding the lock on the `ChannelMap`. I've removed the tests for the accessors that are no longer there. There are some subtleties here. Now that we have more than one kind of Id, it's possible to have a partial match. I've tried to explain all these cases in the comments. }
* | proto: Make Channel::reparameterize take &self.Nick Mathewson2022-10-182-2/+3
| | | | | | | | | | | | | | | | | | | | Even though channels are practically changeable, they use locks internally so that you don't need a `&mut Channel` to send or receive traffic. It makes sense for reparameterizing the channel to also use a &self reference. I'll need this so that I can store channels in an `ByRelayIds<>` set, and still invoke their reparameterize methods.
* | chanmgr: Add identities to pending state in map.Nick Mathewson2022-10-182-8/+46
| | | | | | | | | | This will let us migrate from `HashMap<Ed25519Identity, Entry>` to `ByRelayIds<Entry>`.
* | chanmgr: Require HasRelayIds for AbstractChannel::BuildSpecNick Mathewson2022-10-182-24/+50
| | | | | | | | | | | | This is mostly a testing only change for now too, but soon I'll use it to deal with the fact that we need to know the IDs to actually build a channel at all.
* | chanmgr: Require HasRelayIds for AbstractChannel.Nick Mathewson2022-10-182-1/+43
| | | | | | | | | | This is mostly a testing-only change for now, but soon I'll use it so we can have IdMap for our channel map.
* | chanmgr: Remove the Poisoned state from the map type.Nick Mathewson2022-10-182-48/+12
| | | | | | | | | | | | | | | | The `ByRelayIds` type doesn't have a type equivalent to `hash_map::Entry`, since it's a set type rather than a map type. Therefore, the only plausible way to do entry mutation will be to remove the old entry and insert a new one. And so, we no longer need a "poisoned" state.
* | proto: Implement HasRelayIds for Channel.Nick Mathewson2022-10-182-0/+10
| |
* | linkspec: Add ByRelayIds::remove_exact.Nick Mathewson2022-10-181-0/+65
| | | | | | | | | | We need a function to remove an entry if it appears with _exactly_ the same relay Ids, but not otherwise. This method will do that.
* | linkspec: Add an "all_overlapping" accessor to ByRelayIds.Nick Mathewson2022-10-183-1/+117
| | | | | | | | | | | | | | Also, add a few tests for this and the other accessors. We'll need this accessor to find whether we have any channels to _any_ of the identities that we're trying to connect to.
* | Write more tests for RelayId and RelayIdRef.Nick Mathewson2022-10-151-0/+138
| |
* | Write tests for RelayIdSet.Nick Mathewson2022-10-152-0/+121
| |
* | Fix deserialize impl for RelayId.Nick Mathewson2022-10-151-1/+1
| | | | | | | | | | | | | | We need to handle String, not just str, since some deserializers have to handle escapes and generate new strings. Found while writing tests; fixes #605.
* | linkspec: impl Hash for RelayIdRefNick Mathewson2022-10-152-1/+3
|/
* chanmgr: Edit comments, fix docsNick Mathewson2022-10-134-18/+49
|
* chanmgr: Remove RegistryAsFactory.Nick Mathewson2022-10-131-11/+6
| | | | | Since there is no longer a blanket implementation of ChannelFactory for TransportHelper, we no longer need a separate type here.
* ChanMgr: Reorganize factory, builder, transport code.Nick Mathewson2022-10-136-282/+330
| | | | There is no actual code change here: just movement.
* Fix some rustdoc errors.Nick Mathewson2022-10-138-21/+18
| | | | | | In addition to the usual "You named that method wrong!" errors, we have a new rustdoc error that complains about bogus "HTML tags" that are actually unquoted usage of types like `Result<Foo>`.
* Merge branch 'factory_redux' into 'main'Nick Mathewson2022-10-139-136/+258
|\ | | | | | | | | chanmgr: Build and use chanmgr factory APIs See merge request tpo/core/arti!769
| * Flatten TimeoutChannelFactory into ChannelBuilder.Nick Mathewson2022-10-132-48/+30
| |
| * chanmgr: clean up some TODO pt-client items and documentation.Nick Mathewson2022-10-133-80/+23
| |
| * Allow multiple ChannelBuilders to share a ChanMgrEventSender.Nick Mathewson2022-10-132-4/+9
| |
| * chanmgr: Use ChannelFactory via a Box<dyn<ChannelFactory>>.Nick Mathewson2022-10-132-4/+28
| | | | | | | | | | This will prepare for supporting multiple different ChannelFactory implementations.
| * chanmgr: Move Timeout functionality into a decorator object.Nick Mathewson2022-10-132-12/+51
| |
| * Have ChannelBuilder use TransportHelper.Nick Mathewson2022-10-134-27/+92
| | | | | | | | | | | | This lets us build channels using different TransportHelpers, including the (new) default TransportHelper, which just uses the old connect_to_one() code.
| * Implement ChannelFactory for (a wrapper of) TransportRegistry.Nick Mathewson2022-10-121-1/+23
| | | | | | | | This will let us just have ChanMgr take a `dyn ChannelFactory`.
| * chanmgr: Clean up async-ness on factory types.Nick Mathewson2022-10-122-12/+18
| | | | | | | | | | | | | | | | The traits that launch connections need to be async; the traits that don't, shouldn't be async. Additionally, we need a few more "Sync" annotations here for the futures to work.
| * Rename mgr::ChannelFactory to mgr::AbstractChannelFactoryNick Mathewson2022-10-123-19/+22
| | | | | | | | | | | | | | | | | | This is an internal type (distinct from factory::ChannelFactory) that we use to make the code in `tor_chanmgr::mgr` agnostic about what a channel actually is, and how it is actually launched. Therefore, I'm renaming it and giving better documentation in a couple of places, to prevent confusion.
| * Add several accessors to ChannelMethod.Nick Mathewson2022-10-121-0/+33
| | | | | | | | | | | | * Get `TransportId` * Get the target address (of any type) * Ask, "is this a direct connection"?
* | Merge branch 'readmes' into 'main'Nick Mathewson2022-10-1240-2096/+61
|\ \ | |/ |/| | | | | | | | | Abolish maint/readme and use doc include Closes #603 See merge request tpo/core/arti!768
| * cargo fmt to remove blank linesIan Jackson2022-10-1235-35/+0
| | | | | | | | | | | | | | Apparently cargo fmt doesn't like these, which my perl rune didn't delete. This commit is precisely the result of `cargo fmt`.
| * Replace all README copies in src/lib.rs with includesIan Jackson2022-10-1235-2048/+35
| | | | | | | | | | | | | | | | The feature we want is `#[doc = include_str!("README.md")]`, which is stable since 1.54 and our MSRV is now 1.56. This commit is precisely the result of the following Perl rune: perl -i~ -0777 -pe 's{(^//!(?!.*\@\@).*\n)+}{#![doc = include_str!("../README.md")]\n}m' crates/*/src/lib.rs
| * README doctests: fix tor-rtmockIan Jackson2022-10-121-2/+3
| |
| * README doctests: fix safelogIan Jackson2022-10-121-0/+3
| | | | | | | | Add some dummy definitions that support the example.
| * README doctests: fix fs-mistrustIan Jackson2022-10-121-3/+12
| | | | | | | | | | | | Add fn main wrappers to allow use of ?. Add ,no-run to test cases that fail due to accessing the filesystem.
| * README doctests: fix arti-clientIan Jackson2022-10-121-5/+5
| | | | | | | | Add ,ignore to ignore three shell runes.
| * README doctests: fix arti-clientIan Jackson2022-10-121-3/+3
| | | | | | | | | | | | | | | | Add ,ignore to ignore three examples that don't actually compile. cargo readme would add these annotations to lib.rs, but the doc include doesn't do stuff like that. pandoc seems to still render the result just fine.
* | struct BridgeConfig: Rename from BridgeIan Jackson2022-10-124-22/+22
| | | | | | | | Fixes #599
* | struct Bridge: add ref to ticketIan Jackson2022-10-121-1/+1
|/
* cfg tests: bridges: Document test case assumptionsIan Jackson2022-10-121-0/+19
|
* cfg tests: bridges: Remove now-redundant block { }Ian Jackson2022-10-121-13/+11
|
* cfg test: bridges: Test all three feature casesIan Jackson2022-10-121-4/+31
| | | | | | | | | | | | | This demonstrates that: * !bridge-client: uncommenting nondefault bridge config generates urecognized config key warnings (but the config is still accepted)( * bridge-client, !pt-client: uncommenting nondefault bridges generates error due to attempting to use a PT. If that's filtered out, everything is fine. * pt-client: Everything is good (as before).
* cfg tests: bridges: Prepare for more comprehensive testingIan Jackson2022-10-121-8/+20
| | | | | | | | | | | | | * Introduce filter_examples and resolve_examples helpers, which will become more complex in a moment. * Move the API test into a { } block to minimise subsequent diff. It's going to become conditional. * In subsequent comparisons, use the parsed version, since the API built one might not exist. No overall functional change.
* cfg tests: Make ExampleSectionLines::resolve fallibleIan Jackson2022-10-121-5/+5
|
* Fix comment typo.Nick Mathewson2022-10-121-1/+1
|
* Fix error messageNick Mathewson2022-10-121-1/+1
|
* bridge config: Clarify that examples are nonfunctionalIan Jackson2022-10-121-0/+2
|
* bridges: Test configurationIan Jackson2022-10-121-0/+121
|
* pt and bridges: Parse configurationIan Jackson2022-10-122-3/+84
|
* config exhaust checking: Feature-limit some of the testsIan Jackson2022-10-121-11/+17
|
* tor-config: Provide MultilineListBuilderIan Jackson2022-10-122-0/+208
| | | | This is what we'll use to parse the `bridges.bridges` config key.