| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| | | | | | | |
|
| | | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
This commit implements the logic necessary to retrieve the (missing)
directory authority certificates from an upstream directory authority.
In order to do so, this commit implements three new functions:
1. `download_authority_certificates()`
2. `parse_authority_certificates()`
3. `verify_authority_certificates()`
4. `insert_authority_certificates()`
|
| | | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
This commit adds an out-of-bounds memory check to
parse2::parse_netdoc_multiple_with_offsets while adding the guarantee
that interfacing applications do not need to validate the returned usize
values to be in-range.
|
| | | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
This commit adds a CHECK constraint to the compressed_document table in
order to ensure that `algorithm` may only take up a limited set of
values.
|
| | | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
This commit moves the ContentEncoding enum from the http module to the
database module, primarily because the content encoding is more of a
matter to the database, as this is where the data actually resides.
|
| | | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
This commit implements support for adding arbitrary documents into the
store table.
It is non-trivial because the relevant data has to be compressed into
various formats, so it can be retrieved without delays.
|
| | | | | | | |
|
| | | | | | | |
|
| | | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
This commit adds the `get_recent_authority_certificates()` function to
the operation of a directory mirror, which is responsible for looking up
the certificates in the database, returning the parsed found ones as
well as the missing ones.
|
| | | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
The reverse direction already exists and it will be required when we act
with functions outside the crate that only accept a `SystemTime` in
situations where we just have a `Timestamp`.
|
| | | | | | | |
|
| | | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
This commit adds the method `as_hex_upper(&self) -> String` to
`RsaIdentity`, which returns the `RsaIdentity` as a hexadecimal string
in uppercase.
Although this type already implements `ToString`, this result is
unsuitable for working with consensuses because they neither contain a
`$` prefix, nor are encoded in lowercase.
|
| | |/ / / /
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
This commit marks the ConsensusFlavor struct exhaustive because handling
it in a non-exhaustive fashion would cause lots of redundant error
handling in tor-dirserver.
Besides, a change in the list of consensus flavors should indeed be
breaking for applications making use of this struct, as it is quite a
heavy change, from a netdoc point of view.
|
| |\ \ \ \ \
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
tor-netdoc: Rename Version and expose it as netstatus::SoftwareVersion
See merge request tpo/core/arti!3594
|
| | |/ / / /
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
This struct is still a bit odd, and there's a todo saying we may
change it again, but at least now it's now available.
While we're here, rename the variant Tor to CTor.
|
| | | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
This function can only be called once within a program, so we can't call
it ourselves from a `TorClient`. The user must call it themselves, so we
should document this.
|
| | | | | | |
|
| |/ / / / |
|
| |\ \ \ \
| | | | |
| | | | |
| | | | |
| | | | | |
tor-netdoc: Use manual non exhaustive in constructors
See merge request tpo/core/arti!3571
|
| | | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
As per
https://gitlab.torproject.org/tpo/core/arti/-/merge_requests/3571#note_3325449
|
| | | | | |
| | | | |
| | | | |
| | | | | |
With `#[non_exhaustive]`, you're not allowed to write even `Thing { ..base }`.
|
| | | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
This lets us having document items that are "manually non exhaustive"
which is necessary for struct literal constructors.
|
| | | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
This commit speeds up the tests in `tor-dirserver` by using
functionality from Tokio's `test-util`.
Most notably, it runs the time intensive test in paused mode, which
means that the clock gets advanced either explicitly or implicitly using
auto-advance in case the runtime has nothing to do.
In our case, the last one, auto-advancing, is used, leading to our
sleep calls returning immediately.
This is good enough for testing in this module. It is not the
responsibility of tor-dirserver to ensure whether `RetryDelay` returns
proper values, as this is the responsibility of `tor-basic-utils`.
Still, it is a bit unfortunate that Tokio offers no way to manually
disbale the auto-advancing. In the future, it might be useful to
migrate more parts of this to crate to `tor-rtcompat`, but for now, this
change is a good enough performance fix.
|
| |/ / / /
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
This commit removes `mirror::download::test::request_fail_timeout` which
takes more than five seconds (due to a timeout) and is generally
ineffective in what it does, because testing whether a task is still
sleeping after a certain time is not super trivial with the tools Tokio
offers.
All this test offers is testing that we enter a timeout at all.
|
| |\ \ \ \
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
tor-dirserver: Eliminate use of sleep in tests
Closes #2308
See merge request tpo/core/arti!3582
|
| | | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
This commit eliminates the use of sleep in database tests because those
can be flaky, especially when the CI scheduler is overloaded, leading to
potential timeout invariants not holding true anymore.
We now fix this by using synchronization primitives from Rust in order
for threads to communicate. Documentation has been added explaining how
these tests work in greater detail.
Fixes #2308
|
| | | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
We aren't using this, and this crate still has a 0.x version. I think
this is OK, rather than having a deprecation period.
|
| | | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
SQLite does not support u64 and the new version of SQLite makes a
certain piece of tor-dirserver no longer compile due to the lack of
`ToSql` for `u64`. This commit fixes it by converting these types from
`u64` to `i64` saturatingly.
|
| | | | | | |
|
| | | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
Fix the conflict in tor-netdoc/semver.md by hand, including the new
entries already landed since v1.9.0.
|
| |\ \ \ \ \
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
chanmgr: Ability for the ChanMgr to be channel type specific and launch relay channels
See merge request tpo/core/arti!3563
|
| | | | | | | |
|
| | | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
They are public but avoid anyone outside implementing them.
Signed-off-by: David Goulet <[email protected]>
|
| | | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
To pull this off, ChannelProvider::get_or_launch() needed to change from
"&self" to "self: Arc<Self>" so we could pass self to the spawned task.
This is fine as the caller of ChannelProvider (circuit reactor) has a
Arc<ChanMgr>.
This also removes the PhantomData for the runtime as we now actually use
it.
Signed-off-by: David Goulet <[email protected]>
|
| | | | | | |
| | | | | |
| | | | | |
| | | | | | |
Signed-off-by: David Goulet <[email protected]>
|
| | | | | | |
| | | | | |
| | | | | |
| | | | | | |
Signed-off-by: David Goulet <[email protected]>
|
| | | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
Instead, we'll simply use `RelayInitiator` if the identity keys
(identities) struct is set.
This avoids the problem where someone could call outbound_chan_type() of
the ChanMgrConfig and get the wrong channel type if with_identities() is
set after.
This way, a single call, `with_identities()` is what will define the
outbound channel type so no chance of errors.
This also removes the cfg_if {} around the builder creation in a much
more simplified version.
Related to #1599
Signed-off-by: David Goulet <[email protected]>
|
| | | | | | |
| | | | | |
| | | | | |
| | | | | | |
Signed-off-by: David Goulet <[email protected]>
|
| | | | | | |
| | | | | |
| | | | | |
| | | | | | |
Signed-off-by: David Goulet <[email protected]>
|
| | | | | | |
| | | | | |
| | | | | |
| | | | | | |
Signed-off-by: David Goulet <[email protected]>
|
| | | | | | |
| | | | | |
| | | | | |
| | | | | | |
Signed-off-by: David Goulet <[email protected]>
|
| | | | | | |
| | | | | |
| | | | | |
| | | | | | |
Signed-off-by: David Goulet <[email protected]>
|
| | | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
Remove code duplication and simplifies the code by using the new
VerifiableChannel and FinalizableChannel traits.
Signed-off-by: David Goulet <[email protected]>
|
| | | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
Add traits that will be returned outside tor-proto allowing us to not
expose client and relay specific channels.
The goal is for the tor-chanmgr to get those objects implementing those
traits and can build and run the reactor without knowing the specific
underlying type.
This allows us to have less code duplication and less client/relay
distinction in the chanmgr.
Signed-off-by: David Goulet <[email protected]>
|
| | | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
First, this is not great. Lots of duplicated code but it is a starting
point that we can build on top to remove code duplication.
Future commit will address this but for now, the client and relay
mechanics are implemented.
Signed-off-by: David Goulet <[email protected]>
|
| | | | | | |
| | | | | |
| | | | | |
| | | | | | |
Signed-off-by: David Goulet <[email protected]>
|
| | | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
Heavy refactoring coming up for the ChanBuilder. This renames
connect_no_timeout() to be client specific and uses the client channel
builder directly instead of the generic one.
Previous commit added the outbound ChannelType to the ChanBuilder which
means that we'll soon have a relay specific function to connect using
the relay channel builder.
Refactoring will then happen for shared code in those two functions.
Signed-off-by: David Goulet <[email protected]>
|
| | | | | | |
| | | | | |
| | | | | |
| | | | | | |
Signed-off-by: David Goulet <[email protected]>
|
| | | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
This allows us to pass it to the ChanBuilder which will be able to use
this type for the outbound channels.
For now, we do this trick where if we have relay identities, we always
consider that all outbound channels will be RelayInitiator.
Signed-off-by: David Goulet <[email protected]>
|
| | | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
This struct is used to pass configuration parameters to the ChanMgr when
building it.
At the moment, it holds the ChannelConfig and RelayIdentities (feature
gated) which will be used in subsequent commits.
Note that relays do require RelayIdentities to build channels.
Signed-off-by: David Goulet <[email protected]>
|