| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
| |
Typos found with codespell
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
This commit adds a new method to static engine that serves as a
convenience wrapper around `tor_dirclient::send_request`.
The reason for that is, that fetch_consensus is not the only method that
requires performing download requests, so it makes sense to generalize
it.
Besides, it also adds support for parsing multiple netdocs alongside
storing their raw variant, which is required for inserting them into the
database at one point eventually.
|
| |
|
|
|
| |
This commit adds the IsFatal trait to the err module for having a
generic signature for the fatality of certain error variants.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
This commit implements the `FetchConsensus` state by adding a method to
`StaticEngine` called `fetch_consensus`, which retrieves the consensus
from an upstream directory authority.
Likewise, it also implements a new error type called
`AuthorityRequestError`.
The retry logic is handled externally which will be done in later
commits.
|
| | |
|
| |
|
|
|
| |
This commit removes the operation serve function because it no longer
fits into the new model of operation using a FSM.
|
| |
|
|
|
|
|
| |
This commit scratches out the FSM for the dirmirror operation.
Right now, there are still lots of TODO, lots of code warnigns, and
such. It should model the rough concept.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
This commit removes `DatabaseError::Compression` because it does not fit
in. Right now, this single variant makes the error to be call-site
oriented which is not nice for error handling. Instead, this error
should indicate that something was truly wrong with the database in
itself, such as an invalid schema, a low-level SQLite bug, etc.
Instead, we now map a compression error to `DatabaseError::Bug` because
there is no good reason on why it should fail, given that we compress
memory data to memory data. Probably because it uses the
`std::io::Writer` interface which itself demands use of
`std::io::Result`.
|
| |
|
|
|
|
|
|
|
|
|
| |
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 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 replaces `AuthorityCommunicationError::IO` with
`AuthorityCommunicationError::TcpConnect` while removing the respective
`From<std::io::Error>` implementation, mostly because an IO error is way
too generic and in our case, it would only occurr with a failed TCP
connection.
|
| |
|
|
|
|
|
|
|
| |
This commit implements the DownloadManager in its own module, an object
responsible for downloading network documents from an upstream directory
authority.
Further motivation for this can be found in the rustdoc comment of the
respectively introduced type.
|
| |
|
|
|
|
| |
This commit changes various things in the dirmirror operation, namely
the use of a SystemTime wrapper type that provides saturation on both
ends.
|
| |
|
|
|
|
|
|
|
|
| |
This commit makes the entire database operations synchronous, thereby
replacing deadpool with r2d2.
The full motivation is outlined in a rustdoc comment at the top of the
`database` module, but it can be summarized to the fact that SQLite is
by design inherently synchronous due to directly interfacing with the
file system.
|
| |
|
|
|
|
|
|
|
|
| |
This commit creates a function named `mirror::operation::serve`, that
will serve as the primary entry point for the dirmirror operation.
While the function itself already contains some logic, such as querying
the timeout to wait for the next consensus, it is largely a rustdoc
design document that adds lots of comment to the `mirror::operation`
module.
|
| |
|
|
|
|
|
|
|
|
| |
This commit starts work in the `mirror::operation` module by
implementing the functions for calculating the `Duration` to wait from a
given `SystemTime` until the point in time when the dirmirror should
download new documents from the authorities again.
Also, this commit introduces new error types and internal helper
functions in order to fulfill this purpose better.
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
| |
This commit uses `tor_error::Bug` for indicating thread poisoning.
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This commit refactors a large part of the HTTP module, namely it
refactors the `Callback` type to a new type called `EndpointFn` which
now works in a transaction based approach and no longer gives access to
the `StoreCache`. The type itself is also no longer a trait but a
concrete type using `fn`.
Another very notable change that became necessary during this commit was
to make large parts of the codebase synchronous instead of async, namely
because it is non-trivial to `Send` a `Transaction` created inside an
async context to a synchronous function. Besides, this change has been
deemed necessary for other reasons to.
The refactoring to more synchronous code has lead to some interesting
changes in `StoreCache` too, namely that in no longer uses async mutex,
but a synchronous mutex instead.
|
| | |
|
| |
|
|
|
|
|
| |
This commit implements the initial draft for the HTTP module.
It is fairly complicated but well documented within the source code,
please refer to that instead.
|
| |
|
|
|
|
| |
This commit adds the `schema.rs` module, which implements the database
schema alongside some functions for initializing the database and
obtaining the database schema version.
|
|
|
This commit lays the initial groundwork for the `tor-dirserver` crate,
a crate that shall implement functionality for dirmirros and dirauths.
For now, the current crate consists of three bare bone modules:
* lib.rs
* err.rs
* mirror.rs
All of which contain mostly boilerplate code for now
|