| Commit message (Collapse) | Author | Age | Files | Lines |
| | |
|
| |
|
|
|
|
|
|
| |
This commit uses the `visibility` and `visible` crates to
conditionally make certain structs and their fields public
(respectively). This is incredibly dangerous to use for anything
besides testing, and I've tried to write the documentation for the
feature accordingly.
|
| | |
|
| |\
| |
| |
| |
| |
| |
| | |
Don't use SystemTime::now()
Closes #306
See merge request tpo/core/arti!365
|
| | | |
|
| | |
| |
| |
| |
| |
| |
| | |
Now we use NetParams. That implies making its constructor public,
which I think it fine.
This is related to #413 but is far from completing that ticket.
|
| | |
| |
| |
| |
| |
| |
| | |
The match was doing a deref coercion.
Found by current nightly's needless_match (whose suggestion doesn't
compile, https://github.com/rust-lang/rust-clippy/issues/8551 )
|
| |\ \
| | |
| | |
| | | |
# Conflicts:
# doc/semver_status.md
|
| | |\ \
| | | |
| | | |
| | | |
| | | | |
Simpify tor-netdoc TokVal
See merge request tpo/core/arti!404
|
| | | | |
| | | |
| | | |
| | | |
| | | | |
This enum was otiose: its set of valid values is precisely those of a
Vec. (Indeed what would TokVal::Multi(vec![]) have meant?)
|
| | | | |
| | | |
| | | |
| | | | |
std::slice::from_ref exists. Spotted while reviewing !400
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
This should save around 1MB per consensus, since every relay has a
'protocols' lines, but there are only a few distinct possibilities
for such a line.
Closes #385.
|
| |/ / /
| | |
| | |
| | |
| | |
| | | |
This should save 1-3 MB of ram on each running arti client.
Closes #384. See also tor#27359 and proposal 298.
|
| | | | |
|
| | | |
| | |
| | |
| | |
| | | |
(Once we're done parsing these, the vector will never get any
longer.)
|
| | | |
| | |
| | |
| | | |
This should save around 181K of heap on a current directory.
|
| | | |
| | |
| | |
| | |
| | |
| | | |
When the version is a Tor version, we can just parse it; otherwise,
we can intern it. This shrinks GenericRouterStatus and avoids a lot
of extra help allocations.
|
| | | |
| | |
| | |
| | | |
Part of #387
|
| |/ / |
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This commit changes the main parsing code for RsaIdentity in
tor-netdoc, and .
Previously, parse_hex_ident was something like 10% of our startup
CPU time; now it's only like ~2%. (Still not perfect, but way
better.)
Closes #377.
|
| | | |
|
| | | |
|
| |/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This lint is IMO inherently ill-conceived.
I have looked for the reasons why this might be thought to be a good
idea and there were basically two (and they are sort of contradictory):
I. "Calling ‘.clone()` on an Rc, Arc, or Weak can obscure the fact
that only the pointer is being cloned, not the underlying data."
This is the wording from
https://rust-lang.github.io/rust-clippy/v0.0.212/#clone_on_ref_ptr
It is a bit terse; we are left to infer why it is a bad idea to
obscure this fact. It seems to me that if it is bad to obscure some
fact, that must be because the fact is a hazard. But why would it be
a hazard to not copy the underlying data ?
In other languages, faliing to copy the underlying data is a serious
correctness hazard. There is a whose class of bugs where things were
not copied, and then mutated and/or reused in multiple places in ways
that were not what the programmer intended. In my experience, this is
a very common bug when writing Python and Javascript. I'm told it's
common in golang too.
But in Rust this bug is much much harder to write. The data inside an
Arc is immutable. To have this bug you'd have use interior mutability
- ie mess around with Mutex or RefCell. That provides a good barrier
to these kind of accidents.
II. "The reason for writing Rc::clone and Arc::clone [is] to make it
clear that only the pointer is being cloned, as opposed to the
underlying data. The former is always fast, while the latter can
be very expensive depending on what is being cloned."
This is the reasoning found here
https://github.com/rust-lang/rust-clippy/issues/2048
This is saying that *not* using Arc::clone is hazardous.
Specifically, that a deep clone is a performance hazard.
But for this argument, the lint is precisely backwards. It's linting
the "good" case and asking for it to be written in a more explicit
way; while the supposedly bad case can be written conveniently.
Also, many objects (in our codebase, and in all the libraries we use)
that are Clone are in fact simply handles. They contain Arc(s) (or
similar) and are cheap to clone. Indeed, that is the usual case.
It does not make sense to distinguish in the syntax we use to clone
such a handle, whether the handle is a transparent Arc, or an opaque
struct containing one or more other handles.
Forcing Arc::clone to be written as such makes for code churn when a
type is changed from Arc<Something> to Something: Clone, or vice
versa.
|
| | |
|
| | |
|
| |
|
|
| |
This is a followup for !314 and !310 to fix compilation on main.
|
| |\
| |
| |
| |
| | |
Refactor errors in tor-netdoc
See merge request tpo/core/arti!314
|
| | | |
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This error type doesn't impement HasKind, since the kind will depend
on context.
However, the existing implementation was pretty messy and inconsistent:
Some errors had positions, some didn't.
Some took messages as str, some as String.
Some had internal errors that were somewhat orthogonal to their actual
types.
This commit refactors tor_netdoc::Error to use a ParseErrorKind, and
adds a set of convenience functions to add positions and
messages to the errors that need them.
|
| | |
| |
| |
| |
| | |
Every other case of tor_netdoc::Error means a parse failure. This one,
though, means a failure to construct a document.
|
| | |
| |
| |
| | |
Nothing creates this.
|
| |/
|
|
| |
Closes #338.
|
| | |
|
| | |
|
| |\
| |
| |
| |
| | |
address clippy's latest lint
See merge request tpo/core/arti!205
|
| | | |
|
| | |
| |
| |
| | |
We're assuming that prop285 is accepted in some form.
|
| | |
| |
| |
| |
| |
| | |
Our behavior in handling not-yet-valid router descriptors doesn't match
the C Tor implementation, but it's not a big deal:
we don't currently use router descriptors at all.
|
| | |
| |
| |
| |
| |
| | |
If we fail to convert a curve25519 key to an ed25519 key for checking
the onion-key crosscert, don't call that an internal error: it means
that something is wrong with the provided ntor key.
|
| |/
|
|
|
| |
As of tor-spec commit 01122c5bd7d2f0f, the spec is no longer ambiguous
on this point.
|
| | |
|
| |
|
|
|
| |
[Edited by nickm: This applies one of Daniel's fixes in place of one
of Trinity's: Trinity says it's a bit cleaner, and I agree.]
|
| | |
|
| |
|
|
|
|
|
|
| |
We want to only use TODO in the codebase for non-blockers, and open
tickets for anything that is a bigger blocker than a TODO. These
XXXXs seem like definite non-blockers to me.
Part of arti#231.
|
| | |
|
| | |
|
| |\ |
|
| | | |
|
| | | |
|
| | |
| |
| |
| |
| |
| |
| | |
Also fix a couple of warnings introduced by now-unneeded imports
with new ed25519 crate.
This is part of the process for releasing our next version.
|