Struct tor_dirmgr::DirMgr
source · [−]pub struct DirMgr<R: Runtime> { /* private fields */ }
Expand description
A directory manager to download, fetch, and cache a Tor directory.
A DirMgr can operate in three modes:
- In offline mode, it only reads from the cache, and can only read once.
- In read-only mode, it reads from the cache, but checks whether it can acquire an associated lock file. If it can, then it enters read-write mode. If not, it checks the cache periodically for new information.
- In read-write mode, it knows that no other process will be writing to the cache, and it takes responsibility for fetching data from the network and updating the directory with new directory information.
Implementations
sourceimpl<R: Runtime> DirMgr<R>
impl<R: Runtime> DirMgr<R>
sourcepub async fn load_once(runtime: R, config: DirMgrConfig) -> Result<Arc<NetDir>>
pub async fn load_once(runtime: R, config: DirMgrConfig) -> Result<Arc<NetDir>>
Try to load the directory from disk, without launching any kind of update process.
This function runs in offline mode: it will give an error if the result is not up-to-date, or not fully downloaded.
In general, you shouldn’t use this function in a long-running program; it’s only suitable for command-line or batch tools.
sourcepub async fn load_or_bootstrap_once(
config: DirMgrConfig,
runtime: R,
circmgr: Arc<CircMgr<R>>
) -> Result<Arc<NetDir>>
pub async fn load_or_bootstrap_once(
config: DirMgrConfig,
runtime: R,
circmgr: Arc<CircMgr<R>>
) -> Result<Arc<NetDir>>
Return a current netdir, either loading it or bootstrapping it as needed.
Like load_once, but will try to bootstrap (or wait for another process to bootstrap) if we don’t have an up-to-date bootstrapped directory.
In general, you shouldn’t use this function in a long-running program; it’s only suitable for command-line or batch tools.
sourcepub fn create_unbootstrapped(
config: DirMgrConfig,
runtime: R,
circmgr: Arc<CircMgr<R>>
) -> Result<Arc<Self>>
pub fn create_unbootstrapped(
config: DirMgrConfig,
runtime: R,
circmgr: Arc<CircMgr<R>>
) -> Result<Arc<Self>>
Create a new DirMgr
in online mode, but don’t bootstrap it yet.
The DirMgr
can be bootstrapped later with bootstrap
.
sourcepub async fn bootstrap(self: &Arc<Self>) -> Result<()>
pub async fn bootstrap(self: &Arc<Self>) -> Result<()>
Bootstrap a DirMgr
created in online mode that hasn’t been bootstrapped yet.
This function will not return until the directory is bootstrapped enough to build circuits. It will also launch a background task that fetches any missing information, and that replaces the directory when a new one is available.
This function is intended to be used together with create_unbootstrapped
. There is no
need to call this function otherwise.
If bootstrapping has already successfully taken place, returns early with success.
Errors
Returns an error if bootstrapping fails. If the error is Error::CantAdvanceState
,
it may be possible to successfully bootstrap later on by calling this function again.
Panics
Panics if the DirMgr
passed to this function was not created in online mode, such as
via load_once
.
sourcepub fn bootstrap_started(&self) -> bool
pub fn bootstrap_started(&self) -> bool
Returns true
if a bootstrap attempt is in progress, or successfully completed.
sourcepub async fn bootstrap_from_config(
config: DirMgrConfig,
runtime: R,
circmgr: Arc<CircMgr<R>>
) -> Result<Arc<Self>>
pub async fn bootstrap_from_config(
config: DirMgrConfig,
runtime: R,
circmgr: Arc<CircMgr<R>>
) -> Result<Arc<Self>>
Return a new directory manager from a given configuration, bootstrapping from the network as necessary.
sourcepub fn reconfigure(
&self,
new_config: &DirMgrConfig,
how: Reconfigure
) -> Result<(), ReconfigureError>
pub fn reconfigure(
&self,
new_config: &DirMgrConfig,
how: Reconfigure
) -> Result<(), ReconfigureError>
Try to change our configuration to new_config
.
Actual behavior will depend on the value of how
.
sourcepub fn bootstrap_events(&self) -> DirBootstrapEvents
pub fn bootstrap_events(&self) -> DirBootstrapEvents
Return a stream of DirBootstrapStatus
events to tell us about changes
in the latest directory’s bootstrap status.
Note that this stream can be lossy: the caller will not necessarily observe every event on the stream
sourcepub fn opt_netdir(&self) -> Option<Arc<NetDir>>
pub fn opt_netdir(&self) -> Option<Arc<NetDir>>
Return an Arc handle to our latest directory, if we have one.
sourcepub fn netdir(&self) -> Result<Arc<NetDir>>
pub fn netdir(&self) -> Result<Arc<NetDir>>
Return an Arc handle to our latest directory, returning an error if there is none.
Errors
Errors with Error::DirectoryNotPresent
if the DirMgr
hasn’t been bootstrapped yet.
sourcepub fn events(&self) -> impl Stream<Item = DirEvent>
pub fn events(&self) -> impl Stream<Item = DirEvent>
Return a new asynchronous stream that will receive notification whenever the consensus has changed.
Multiple events may be batched up into a single item: each time this stream yields an event, all you can assume is that the event has occurred at least once.
sourcepub fn text(&self, doc: &DocId) -> Result<Option<DocumentText>>
pub fn text(&self, doc: &DocId) -> Result<Option<DocumentText>>
Try to load the text of a single document described by doc
from
storage.
sourcepub fn texts<T>(&self, docs: T) -> Result<HashMap<DocId, DocumentText>> where
T: IntoIterator<Item = DocId>,
pub fn texts<T>(&self, docs: T) -> Result<HashMap<DocId, DocumentText>> where
T: IntoIterator<Item = DocId>,
Load the text for a collection of documents.
If many of the documents have the same type, this can be more
efficient than calling text
.
Trait Implementations
sourceimpl<R: Runtime> NetDirProvider for DirMgr<R>
impl<R: Runtime> NetDirProvider for DirMgr<R>
Auto Trait Implementations
impl<R> !RefUnwindSafe for DirMgr<R>
impl<R> Send for DirMgr<R>
impl<R> Sync for DirMgr<R>
impl<R> Unpin for DirMgr<R> where
R: Unpin,
impl<R> !UnwindSafe for DirMgr<R>
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<T> Downcast for T where
T: Any,
impl<T> Downcast for T where
T: Any,
fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
Convert Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
. Read more
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
Convert Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
. Read more
fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert &Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s. Read more
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert &mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s. Read more
sourceimpl<T> Instrument for T
impl<T> Instrument for T
sourcefn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
sourcefn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
fn vzip(self) -> V
sourceimpl<T> WithSubscriber for T
impl<T> WithSubscriber for T
sourcefn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
Attaches the provided Subscriber
to this type, returning a
WithDispatch
wrapper. Read more
sourcefn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
Attaches the current default Subscriber
to this type, returning a
WithDispatch
wrapper. Read more