summaryrefslogtreecommitdiff
path: root/tor-dirclient/src/lib.rs
Commit message (Collapse)AuthorAgeFilesLines
* Fix some warnings about needless & from nightly clippyNick Mathewson2021-06-181-1/+1
|
* Enormous tor-circmgr rewrite.Nick Mathewson2021-06-141-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | As with the tor-chanmgr code, the circuit manager is now implemented using an AbstractCircMgr type that uses traits to abstract the particular behavior of other types that it uses. (Specifically: circuits, building circuits, and telling whether one circuit usage is compatible with another.) Abstracting out the dependencies in this ways makes it possible to test the circuit manager without having to actually build real circuits. This commit also introduces new behavior for handling pending circuit requests. Upon getting a new request, first we check to see if there's an existing circuit we can use. If there isn't, we look for pending circuits and wait for them. If there aren't any pending circuits we can use, we launch one or more, and wait for them. So far, that's the same as the old behavior. But here's a change: if, while we are waiting for some pending circuits, a different circuit is completed, and it's one we could use, then the task that was building _that_ circuit will tell us: "please look at this circuit". This gives us better changes of getting a usable circuit fast. Minor changes: * The Error type in CircMgr no longer uses anyhow; several errors have been simplified. * We've gotten more formal about the relationship between circuit usage and target usage.
* Add noop_method_call warning.Nick Mathewson2021-05-271-0/+1
| | | | | | This would have saved ahf and me a lot of confusion in debugging a situation where we were cloning a reference of a type that didn't implement Clone.
* Enable cargo_common_metadata warning.Nick Mathewson2021-05-251-0/+1
|
* Module docs for remaining cratesNick Mathewson2021-05-251-5/+13
|
* Add the "unreachable_pub" lint.Nick Mathewson2021-05-181-0/+1
| | | | | | This is a somewhat obnoxious change in its scope and requirements, but it makes it easier to understand what the real public and private parts of our APIs are.
* Add trait_duplication_in_bounds warning.Nick Mathewson2021-05-031-0/+1
|
* Add unseparated_literal_suffix lint, and fix it.Nick Mathewson2021-05-031-0/+1
|
* Add a few more clippy warningsNick Mathewson2021-05-031-0/+5
|
* Split mocking parts of rtcompat into new rtmock crate.Nick Mathewson2021-05-031-2/+1
| | | | | Since these parts are testing-only, let's take steps to make sure we don't ship them in production by accident.
* Add some more clippy warnings to our list.Nick Mathewson2021-04-271-1/+6
|
* Enforce (and obey) clippy lints about exhaustive enums, structs.Nick Mathewson2021-04-271-0/+3
| | | | | | | | These lints force us to declare our exported enums and exhaustive-looking structs as non-exhaustive (so that we can add to them in the future without breaking our API) or to explicitly disable the warning for a given enum/struct (to say that we _intend_ for additions to be a breaking change).
* Use stream_pair() to write a test for tor_dirclient::downloadNick Mathewson2021-04-211-0/+50
|
* Make zstd and xz compression optional, but on-by-default.Nick Mathewson2021-04-211-1/+11
|
* Test for tor_dirclient::read_headersNick Mathewson2021-04-201-0/+39
|
* Tests for tor_dirclient::read_and_decompressNick Mathewson2021-04-201-3/+86
|
* Test for tor_dirclient::read_until_limited()Nick Mathewson2021-04-201-0/+35
|
* Move timer functions into an extension trait.Nick Mathewson2021-04-171-4/+4
|
* Move around the public modules in tor_rtcompat.Nick Mathewson2021-04-171-1/+1
|
* Remove all non-runtime methods in tor_rtcompat.Nick Mathewson2021-04-161-9/+19
|
* Add a "Runtime" parameter to all the manager types.Nick Mathewson2021-04-161-3/+6
| | | | | This is a big change, but it is a step towards our goal of removing tor_rtcompat:: calls directly.
* Replace tor-decompress with async-compression crate.Nick Mathewson2021-04-131-60/+45
| | | | This lets us simplify tor-dirclient a fair bit. Closes #79.
* tor-dirclient: Use AsyncBufRead to simplify code a bit.Nick Mathewson2021-04-131-29/+62
| | | | | | | | | | | Previously we read too much data from our input, and then used the unused portion as an initial state of a buffer for handling subsequent data. Yuck! Instead we can just use an AsyncBufRead and only read the parts we want. This code takes some pains to never read too much data: I'd rather just "read until the first CRLF" or have some kind of pushback mechanism. But for now it's probably fine.
* Major revision on DirMgr logic -- almost a complete rewrite.Nick Mathewson2021-04-131-2/+2
| | | | | | | | The big idea of this revision is to separate the code that knows about doing downloads from the code that decides what to download. Later, we can make a similar change for database access. With these changes together, we can make our code much more testable, and eventually enable more download types in parallel.
* Add accessors for members of different directory requestsNick Mathewson2021-04-011-3/+3
| | | | | | | | This will let us use these types both as client and server-side implementations. Making this change required me to change the download code to take requests by reference. (Sorry, David)
* Rename ClientRequest to Requestable.Nick Mathewson2021-04-011-2/+2
|
* Refactor errors in tor-decompress and tor-dirclient.Nick Mathewson2021-03-241-50/+46
| | | | | This lets us reinstate the code in dirclient that retired circuits depending on the error type.
* dirclient: add a function to download over a stream.Nick Mathewson2021-03-241-66/+84
| | | | | Also, remove references to DataStream, and comment on the future of the module.
* Use AsyncRead and AsyncWrite in tor-dirclientNick Mathewson2021-03-101-4/+8
|
* Remove an unwrap in dirclient.Nick Mathewson2021-03-041-40/+41
|
* Move content-encoding handling to decompressNick Mathewson2021-03-041-62/+2
| | | | This way tor-dirclient doesn't need to link to the compression crates.
* Moves decompress related code into tor-decompress crateKushal Das2021-03-041-6/+3
| | | | | The related data structures are marked as public in the tor-decompress crate so that tor-dirclient can access them.
* Port to work with tokio or async-std.Nick Mathewson2021-03-021-1/+2
| | | | | | | | | | | | | | | | | | This is fairly ugly and I think I'll need to mess around with the feature configuration a while until we get something that's pleasant to develop with. This still seems like a good idea, though, since we _will_ need to be executor-agnostic in the end, or we'll have no way to handle wasm or embedded environments. Later down the road, we'll probably want to use futures::Executor or futures::Spawn more than having global entry points in tor_rtcompat. That would probably make our feature story simpler. Tokio is the default now, since tokio seems to be more heavily used for performance-critical stuff. This patch breaks tests; the next one will fix them, albeit questionably.
* Add an error type check in test_get_decompressor_err in tor-dirclienthiro2021-01-251-2/+9
|
* Merge remote-tracking branch 'origin/mr/10' into mainNick Mathewson2021-01-211-1/+2
|\
| * Adds zstd decompression implementation for dirclientKushal Das2021-01-211-1/+2
| | | | | | | | Adds dependency to zstd crate.
* | Add a little testing in tor-dirclientNick Mathewson2021-01-211-0/+36
|/
* Merge branch 'mr_1_squashed' into mainNick Mathewson2020-12-171-1/+4
|\
| * Fixup! issue #34: adding support for xz2owen662020-12-101-3/+3
| |
| * issue #34: adding support for xz2owen662020-12-021-0/+3
| |
* | Use anyhow crate to add extra context for various dirclient errors.George Kadianakis2020-12-101-4/+15
| |
* | De-parameterize ChanMgr and everything that wraps it.Nick Mathewson2020-12-081-5/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This makes a whole lot of our code simpler, and makes it so that CircMgr and DirMgr no longer need to have anything parameterized over transports, either. Instead of boxing Transport inside of ChanMgr, I've made a new Connection trait that goes from a ChanTarget* straight to a Channel. This lets us avoid having to box the intermediate TLS object. [*] Actually, a copy of the information from a ChanTarget. Ick, but I had to make a copy to avoid parameterizing Connecter::build_channel.
* | Mark some XXXX issues as XXXX-A1.Nick Mathewson2020-12-071-1/+1
| |
* | tor-dirclient: tweak so that its future is Send.Nick Mathewson2020-12-041-2/+2
| |
* | Fix a couple of clippy warnings in tor-dirclient.Nick Mathewson2020-12-021-2/+2
| |
* | Abandon directory circuits on most kinds of directory failure.Nick Mathewson2020-12-021-21/+94
|/ | | | | (There are more cases that this _doesn't_ handle, but it's a start for now.)
* tor-dirclient: add timeoutsNick Mathewson2020-12-011-5/+27
| | | | | | | | This adds two timeouts in total: one for sending begin, and getting headers, and one for getting the rest of the data. These timeouts are way too long right now, but at least the code is there.
* Implement a maximum length for directory responsesNick Mathewson2020-11-251-4/+11
|
* Extract another function in tor-dirclientNick Mathewson2020-11-251-16/+28
|
* Better error types for tor-dirclientNick Mathewson2020-11-251-7/+8
|