summaryrefslogtreecommitdiff
path: root/crates/tor-proto
Commit message (Collapse)AuthorAgeFilesLines
...
* Merge IpVersionPreferences and the optimistic flag into one type.Nick Mathewson2021-11-103-7/+68
| | | | | It seems like a good time to do this, before we add a zillion other arguments to begin_stream.
* Refactor wait_for_connection a bit.Nick Mathewson2021-11-101-12/+14
| | | | | | | * Make it crate-visible only. * Make it idempotent * Have it be an internal error if it's called at the wrong time. * Simplify the return logic.
* Implement optimistic streamYuan Lyu2021-11-092-23/+50
|
* Replace all println/eprintln calls outside of arti CLI with trace.Nick Mathewson2021-11-042-4/+4
|
* tor-proto: Use a dedicated sender for channel cells, make full-duplexeta2021-11-032-47/+105
| | | | | | | | | | | | | | | | @nickm pointed out that refactoring tor_proto::channel's Reactor to do sending as well meant that it could only send or receive, but not both, simultaneously, which was bad! To fix this, rewrite Reactor::run_once to use a handcrafted future (with futures::future::poll_fn) that can handle the logic required to push items onto the sink asynchronously (i.e. checking that it can be written to before trying to do that, and then flushing it). This also means we don't use select_biased! any more, and just handroll that logic ourselves; as a small bonus, we can now process all 3 kinds of message in one run_once() call, instead of having to do only one of them.
* Get rid of tor-proto's ChannelImpl, and use the reactor more insteadeta2021-11-038-344/+261
| | | | | | | | | | | | | | | | | | | Instead of awkwardly sharing the internals of a `tor-proto` `Channel` between the reactor task and any other tasks, move most of the internals into the reactor and have other tasks communicate with the reactor via message-passing to allocate circuits and send cells. This makes a lot of things simple, and has convenient properties like not needing to wrap the `Channel` in an `Arc` (though some places in the code still do this for now). A lot of test code required tweaking in order to deal with the refactor; in fact, fixing the tests probably took longer than writing the mainline code (!). Importantly, we now use `tokio`'s `tokio::test` annotation instead of `async_test`, so that we can run things in the background (which is required to have reactors running for the circuit tests). This is an instance of #205, and also kind of #217.
* Merge branch 'timestamp'Nick Mathewson2021-11-026-0/+146
|\
| * Use coarsetime to build an incoming traffic timestamp.Nick Mathewson2021-11-026-0/+146
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We need this for the circuit timeout estimator (#57). It needs to know "how recently have we got some incoming traffic", so that it can tell whether a circuit has truly timed out, or whether the entire network is down. I'm implementing this with coarsetime, since we need to update these in response to every single incoming cell, and we need the timestamp operation to be _fast_. (This reinstates an earlier commit, f30b2280, which I reverted because we didn't need it at the time.) Closes #179.
* | Refactor tor_proto::circuit::Reactor to use an UnboundedSendereta2021-11-022-85/+31
| | | | | | | | | | | | | | | | Basically the same thing as 371437d3384ed73520e7141e66874be3d85f1df0 ("Refactor tor_proto::channel::Reactor to use an UnboundedSender"), but for tor_proto::circuit's Reactor instead. (part of arti#217)
* | Merge remote-tracking branch 'origin/mr/118'Nick Mathewson2021-11-022-78/+32
|\ \
| * | Refactor tor_proto::channel::Reactor to use an UnboundedSendereta2021-11-022-78/+32
| |/ | | | | | | | | | | | | | | | | | | | | There wasn't any good reason for tor-proto's channel reactor to use a shedload of oneshot channels instead of just an mpsc UnboundedSender, and the whole `CtrlResult` thing made even less sense. Straighten this code out by replacing all of that machinery with a simple UnboundedSender, instead. (part of arti#218)
* / Remove some dbg!() calls in real code.Nick Mathewson2021-11-021-2/+0
|/
* Bump all crate versions to 0.0.1Nick Mathewson2021-10-291-8/+8
|
* Improve docs of more (potentially re-exported) arti-client typeseta2021-10-291-16/+48
| | | | | | | | | | | | | | | | | | | | | Most of the structs in `arti-client` have example code now, to give a clearer idea of how they're used. Annoyingly, a lot of the types exposed in `arti-client` are actually re-exports, which makes documentation a bit harder: example code that references other parts of `arti-client` can't actually be run as a doctest, since the crate it's in is a dependency of `arti-client`. We might be able to fix this in future by doing the documentation in `arti-client` itself, but rustdoc seems to have some weird behaviours there that need to be investigated first (for example, it seems to merge the re-export and original documentation, and also put the re-export documentation on the `impl` block for some reason). For now, though, this commit just writes the docs from the point of view of an `arti-client` consumer, removing notes specific to the crate in which they're defined. It's not ideal, but at least the end user experience is decent.
* Use correct link for AsyncWriteExt::flushNick Mathewson2021-10-281-1/+1
|
* DataStream: document the importance of flush().Nick Mathewson2021-10-281-3/+12
|
* Update our disclaimers and limitations sections.Nick Mathewson2021-10-272-9/+1
|
* s/arti-arti-client/arti-client/ and regenerate readme filesNick Mathewson2021-10-251-2/+2
|
* Replace references to arti-client in the documentation.Nick Mathewson2021-10-212-3/+3
|
* Remove #![allow(clippy::unnecessary_wraps)] in tor-proto.Nick Mathewson2021-10-211-1/+0
|
* Also implement tokio Async{Read,Write} on Data{Reader,Writer}.Nick Mathewson2021-10-191-5/+31
| | | | | | | | This will let callers use the tokio traits on these types too, if they call `split()` on the DataStream. (Tokio also has a `tokio::io::split()` method, but it requires a lock whereas `DataStream::split()` doesn't.)
* Add a little documentation about when you'll need the tokio trait.Nick Mathewson2021-10-191-0/+7
|
* tor-proto: implement tokio Async{Read, Write} traits conditionallyeta2021-10-192-0/+37
| | | | | | | | | futures::io::AsyncRead (and Write) isn't the same thing as tokio::io::AsyncRead, which is a somewhat annoying misfeature of the Rust async ecosystem (!). To mitigate this somewhat for people trying to use the `DataStream` struct with tokio, implement the tokio versions of the above traits using `tokio-util`'s compat layer, if a crate feature (`tokio`) is enabled.
* Use append in place of extend_from_slice in DataReaderImpl::add_data.Nick Mathewson2021-10-171-2/+2
| | | | Suggested by @cheako.
* enable checked_conversions lint.Nick Mathewson2021-10-091-0/+1
|
* Use subtle and some refactoring to remove branches in ntorNick Mathewson2021-10-013-22/+54
| | | | Closes #163
* Typo fixesNick Mathewson2021-09-091-2/+2
|
* Fix clippy warnings in tests with --all-featuresNick Mathewson2021-09-082-10/+9
|
* fix/silence clippy lints in test modulesDaniel Eades2021-09-0816-10/+25
|
* Fix typosJani Monoses2021-09-072-2/+2
|
* Move all crates into a `crates` subdirectory.Nick Mathewson2021-08-2735-0/+9842
This will cause some pain for now, but now is really the best time to do this kind of thing.