<feed xmlns='http://www.w3.org/2005/Atom'>
<title>mirrors/arti.git/crates/tor-proto/src/channel.rs, branch arti-v0.1.0</title>
<subtitle>mirror of https://gitlab.torproject.org/tpo/core/arti
</subtitle>
<id>http://git.dilluti0n.com/mirrors/arti.git/atom?h=arti-v0.1.0</id>
<link rel='self' href='http://git.dilluti0n.com/mirrors/arti.git/atom?h=arti-v0.1.0'/>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/'/>
<updated>2022-02-15T14:57:03Z</updated>
<entry>
<title>Update tor-proto errors to latest API.</title>
<updated>2022-02-15T14:57:03Z</updated>
<author>
<name>Nick Mathewson</name>
<email>nickm@torproject.org</email>
</author>
<published>2022-02-15T14:57:03Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/commit/?id=6b611d6deae2e003ea81f459cd5e005c37ab50ce'/>
<id>urn:sha1:6b611d6deae2e003ea81f459cd5e005c37ab50ce</id>
<content type='text'>
</content>
</entry>
<entry>
<title>tor-proto: use InternalError for internal errors.</title>
<updated>2022-02-15T14:41:11Z</updated>
<author>
<name>Nick Mathewson</name>
<email>nickm@torproject.org</email>
</author>
<published>2022-02-11T20:20:50Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/commit/?id=f23f375e42ef3237f9bbb7b8bfee47ecc9ced4a1'/>
<id>urn:sha1:f23f375e42ef3237f9bbb7b8bfee47ecc9ced4a1</id>
<content type='text'>
</content>
</entry>
<entry>
<title>tor-cell: provide HasKind.</title>
<updated>2022-02-15T14:41:10Z</updated>
<author>
<name>Nick Mathewson</name>
<email>nickm@torproject.org</email>
</author>
<published>2022-02-11T17:17:11Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/commit/?id=da0e9e456c398d33c476db5a28e1c6fff5320c4d'/>
<id>urn:sha1:da0e9e456c398d33c476db5a28e1c6fff5320c4d</id>
<content type='text'>
Additionally, refactor the IoError out of tor_cell::Error:
nothing in TorCell created this; it was only used by tor_proto.

This required refactoring in tor_proto to use a new error type. Here I
decided to use a new CodecError for now, though we may refactor that
away soon too.
</content>
</entry>
<entry>
<title>Remove the use of Mutex in channel unused_since timestamp</title>
<updated>2022-02-08T23:28:45Z</updated>
<author>
<name>Yuan Lyu</name>
<email>lyuyuan92@gmail.com</email>
</author>
<published>2022-02-08T23:28:45Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/commit/?id=595fe1ab881b94106649f9b19eebedf926d68f1b'/>
<id>urn:sha1:595fe1ab881b94106649f9b19eebedf926d68f1b</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Expire channels that have been unused for too long</title>
<updated>2022-02-05T03:52:51Z</updated>
<author>
<name>Yuan Lyu</name>
<email>lyuyuan92@gmail.com</email>
</author>
<published>2022-02-04T04:36:01Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/commit/?id=f6f732a47818f789db76ad692d0025de1051072f'/>
<id>urn:sha1:f6f732a47818f789db76ad692d0025de1051072f</id>
<content type='text'>
</content>
</entry>
<entry>
<title>chanmgr: get rid of Arc around Channel</title>
<updated>2022-01-13T13:12:29Z</updated>
<author>
<name>Ian Jackson</name>
<email>iwj@torproject.org</email>
</author>
<published>2022-01-13T13:12:29Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/commit/?id=9b723cba53852ecd3505c0cabc42ca3b5d31ad34'/>
<id>urn:sha1:9b723cba53852ecd3505c0cabc42ca3b5d31ad34</id>
<content type='text'>
</content>
</entry>
<entry>
<title>add semicolons if nothing returned</title>
<updated>2021-11-25T13:20:37Z</updated>
<author>
<name>Daniel Eades</name>
<email>danieleades@hotmail.com</email>
</author>
<published>2021-11-25T13:14:05Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/commit/?id=db16d13df4779ac61005050dfe5ce05e3d5a1b5d'/>
<id>urn:sha1:db16d13df4779ac61005050dfe5ce05e3d5a1b5d</id>
<content type='text'>
</content>
</entry>
<entry>
<title>tor-proto: Use tor-rtcompat macros for testing, not tokio.</title>
<updated>2021-11-15T17:57:01Z</updated>
<author>
<name>Nick Mathewson</name>
<email>nickm@torproject.org</email>
</author>
<published>2021-11-15T17:55:08Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/commit/?id=f92ad644c90480cd6ea738201119ce1e9fd40d8e'/>
<id>urn:sha1:f92ad644c90480cd6ea738201119ce1e9fd40d8e</id>
<content type='text'>
Closes #222.
</content>
</entry>
<entry>
<title>Completely overhaul the tor-proto circuit reactor</title>
<updated>2021-11-12T15:04:24Z</updated>
<author>
<name>eta</name>
<email>tor@eta.st</email>
</author>
<published>2021-11-09T14:05:31Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/commit/?id=197816d14cfb24c8830b938dac7dc3afb6eb6c26'/>
<id>urn:sha1:197816d14cfb24c8830b938dac7dc3afb6eb6c26</id>
<content type='text'>
Rather like e8e9699c3c239d6c30f9ad414f15d3bad6ec03fd ("Get rid of
tor-proto's ChannelImpl, and use the reactor more instead"), this
admittedly rather large commit refactors the way circuits in `tor-proto`
work, centralising all of the logic in one large nonblocking reactor
which other things send messages into and out of, instead of having a
bunch of `-Impl` types that are protected by mutexes.

Congestion control becomes a lot simpler with this refactor, since the
reactor can manage both stream- and circuit-level congestion control
unilaterally without having to share this information with consumers,
meaning we can get rid of some locks.

The way streams work also changes, in order to facilitate better
handling of backpressure / fairness between streams: each stream now has
a set of channels to send and receive messages over, instead of sending
relay cells directly onto the channel (now, the reactor pulls messages
off each stream in each map, and tries to avoid doing so if it won't be
able to forward them yet).

Additionally, a lot of "close this circuit / stream" messages aren't
required any more, since that state is simply indicated by one end of a
channel going away. This should make cleanup a lot less brittle.

Getting all of this to work involved writing a fair deal of intricate
nonblocking code in Reactor::run_once that tries very hard to be mindful
of making backpressure work correctly (and congestion control); the old
code could get away with having tasks .await on things, but the new
reactor can't really do this (as it'd lock the reactor up), so has to do
everything in a nonblocking manner.
</content>
</entry>
<entry>
<title>tor-proto: Use a dedicated sender for channel cells, make full-duplex</title>
<updated>2021-11-03T16:48:54Z</updated>
<author>
<name>eta</name>
<email>tor@eta.st</email>
</author>
<published>2021-11-03T16:34:33Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/commit/?id=db6b91164ec1069025b7b600f667220b33309b45'/>
<id>urn:sha1:db6b91164ec1069025b7b600f667220b33309b45</id>
<content type='text'>
@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.
</content>
</entry>
</feed>
