Crate tor_circmgr

Source
Expand description

§tor-circmgr

circuits through the Tor network on demand.

§Overview

This crate is part of Arti, a project to implement Tor in Rust.

In Tor, a circuit is an encrypted multi-hop tunnel over multiple relays. This crate’s purpose, long-term, is to manage a set of circuits for a client. It should construct circuits in response to a client’s needs, and preemptively construct circuits so as to anticipate those needs. If a client request can be satisfied with an existing circuit, it should return that circuit instead of constructing a new one.

§Compile-time features

  • specific-relay: Support for connecting to a relay via specifically provided connection instructions, rather than using information from a Tor network directory.

  • full: Enable all features above.

§Experimental and unstable features

Note that the APIs enabled by these features are NOT covered by semantic versioning1 guarantees: we might break them or remove them between patch versions.

  • experimental-api: Add additional non-stable APIs to our public interfaces.

  • experimental: Enable all the above experimental features.

License: MIT OR Apache-2.0


  1. Remember, semantic versioning is what makes various cargo features work reliably. To be explicit: if you want cargo update to only make safe changes, then you cannot enable these features. 

Re-exports§

pub use isolation::IsolationToken;

Modules§

build
Facilities to build circuits directly, instead of via a circuit manager.
config 🔒
Configuration logic for launching a circuit manager.
err 🔒
Declare an error type for tor-circmgr
hspoolhs-common
Manage a pool of circuits for usage with onion services.
impls 🔒
Implement traits from crate::mgr for the circuit types we use.
isolation
Types related to stream isolation
mgr 🔒
Abstract code to manage a set of circuits.
path
Code to construct paths through the Tor network
preemptive 🔒
Tools for determining what circuits to preemptively build.
timeouts
Code for estimating good values for circuit timeouts.
usage 🔒
Code related to tracking what activities a circuit can be used for.

Structs§

CircMgr
A Circuit Manager (CircMgr) manages a set of circuits, returning them when they’re suitable, and launching them if they don’t already exist.
CircMgrInner 🔒
Internal object used to implement CircMgr, which allows for mocking.
CircuitTiming
Configuration for circuit timeouts, expiration, and so on.
CircuitTimingBuilder
Builder for CircuitTiming.
ClockSkewEvents
A stream of SkewEstimate events.
FirstHopId
A unique cryptographic identifier for a selected guard or fallback directory.
PathConfig
Rules for building paths over the network.
PathConfigBuilder
Builder for PathConfig.
PreemptiveCircuitConfig
Configuration for preemptive circuits.
PreemptiveCircuitConfigBuilder
Builder for PreemptiveCircuitConfig.
SkewEstimate
An estimate of how skewed our clock is, plus a summary of why we think so.
TargetPort
A port that we want to connect to as a client.
TargetPorts
Set of requested target ports, mostly for use in error reporting
TestConfigtesting
Testing configuration, with public fields

Enums§

DirInfo
Represents what we know about the Tor network.
Error
An error returned while looking up or building a circuit
ExternalActivity
An activity that can succeed or fail, and whose success or failure can be attributed to a guard.

Constants§

PARETO_TIMEOUT_DATA_KEY 🔒
Key used to load timeout state information.

Traits§

CircMgrConfig
Configuration for a circuit manager
GuardMgrConfig
Configuration for a guard manager

Type Aliases§

Result
A Result type as returned from this crate.
TimeoutStateHandle 🔒
Type alias for dynamic StorageHandle that can handle our timeout state.