struct GetCertsState<R: Runtime> {
    cache_usage: CacheUsage,
    consensus_source: DocSource,
    consensus: GetCertsConsensus,
    consensus_meta: ConsensusMeta,
    missing_certs: HashSet<AuthCertKeyIds>,
    certs: Vec<AuthCert>,
    rt: R,
    config: Arc<DirMgrConfig>,
    prev_netdir: Option<Arc<dyn PreviousNetDir>>,
    protocol_statuses: Option<(SystemTime, Arc<ProtoStatuses>)>,
    filter: Arc<dyn DirFilter>,
}Expand description
Second state: fetching or loading authority certificates.
TODO: we should probably do what C tor does, and try to use the same directory that gave us the consensus.
TODO SECURITY: This needs better handling for the DOS attack where we are given a bad consensus signed with fictional certificates that we can never find.
Fields§
§cache_usage: CacheUsageThe cache usage we had in mind when we began. Used to reset.
consensus_source: DocSourceWhere did we get our consensus?
consensus: GetCertsConsensusThe consensus that we are trying to validate, or an error if we’ve given up on validating it.
consensus_meta: ConsensusMetaMetadata for the consensus.
missing_certs: HashSet<AuthCertKeyIds>A set of the certificate keypairs for the certificates we don’t have yet.
certs: Vec<AuthCert>A list of the certificates we’ve been able to load or download.
rt: RA Runtime implementation.
config: Arc<DirMgrConfig>The configuration of the directory manager. Used for download configuration purposes.
prev_netdir: Option<Arc<dyn PreviousNetDir>>If one exists, the netdir we’re trying to update.
protocol_statuses: Option<(SystemTime, Arc<ProtoStatuses>)>If present a set of protocols to install as our latest recommended set.
filter: Arc<dyn DirFilter>dirfilter only.A filter that gets applied to directory objects before we use them.
Implementations§
Source§impl<R: Runtime> GetCertsState<R>
 
impl<R: Runtime> GetCertsState<R>
Sourcefn check_parsed_certificate<'s>(
    &self,
    parsed: Result<UncheckedAuthCert>,
    source: &DocSource,
    within: &'s str,
) -> Result<(AuthCert, &'s str)>
 
fn check_parsed_certificate<'s>( &self, parsed: Result<UncheckedAuthCert>, source: &DocSource, within: &'s str, ) -> Result<(AuthCert, &'s str)>
Handle a certificate result returned by tor_netdoc: checking it for timeliness
and well-signedness.
On success return the AuthCert and the string that represents it within the string within.
On failure, return an error.
Sourcefn try_checking_sigs(&mut self) -> Result<()>
 
fn try_checking_sigs(&mut self) -> Result<()>
If we have enough certificates, and we have not yet checked the signatures on the consensus, try checking them.
If the consensus is valid, remove the unvalidated consensus from self
and put the validated consensus there instead.
If the consensus is invalid, throw it out set a blocking error.
Trait Implementations§
Source§impl<R: Clone + Runtime> Clone for GetCertsState<R>
 
impl<R: Clone + Runtime> Clone for GetCertsState<R>
Source§fn clone(&self) -> GetCertsState<R>
 
fn clone(&self) -> GetCertsState<R>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
 
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<R: Debug + Runtime> Debug for GetCertsState<R>
 
impl<R: Debug + Runtime> Debug for GetCertsState<R>
Source§impl<R: Runtime> DirState for GetCertsState<R>
 
impl<R: Runtime> DirState for GetCertsState<R>
Source§fn is_ready(&self, _ready: Readiness) -> bool
 
fn is_ready(&self, _ready: Readiness) -> bool
ready status.Source§fn can_advance(&self) -> bool
 
fn can_advance(&self) -> bool
advance method.Source§fn bootstrap_progress(&self) -> DirProgress
 
fn bootstrap_progress(&self) -> DirProgress
DirProgress.Source§fn dl_config(&self) -> DownloadSchedule
 
fn dl_config(&self) -> DownloadSchedule
Source§fn add_from_cache(
    &mut self,
    docs: HashMap<DocId, DocumentText>,
    changed: &mut bool,
) -> Result<()>
 
fn add_from_cache( &mut self, docs: HashMap<DocId, DocumentText>, changed: &mut bool, ) -> Result<()>
Source§fn add_from_download(
    &mut self,
    text: &str,
    request: &ClientRequest,
    source: DocSource,
    storage: Option<&Mutex<Box<dyn Store>>>,
    changed: &mut bool,
) -> Result<()>
 
fn add_from_download( &mut self, text: &str, request: &ClientRequest, source: DocSource, storage: Option<&Mutex<Box<dyn Store>>>, changed: &mut bool, ) -> Result<()>
Source§fn get_netdir_change(&mut self) -> Option<NetDirChange<'_>>
 
fn get_netdir_change(&mut self) -> Option<NetDirChange<'_>>
NetDir,
return the proposed changes.Source§fn reset_time(&self) -> Option<SystemTime>
 
fn reset_time(&self) -> Option<SystemTime>
Auto Trait Implementations§
impl<R> Freeze for GetCertsState<R>where
    R: Freeze,
impl<R> !RefUnwindSafe for GetCertsState<R>
impl<R> Send for GetCertsState<R>
impl<R> Sync for GetCertsState<R>
impl<R> Unpin for GetCertsState<R>where
    R: Unpin,
impl<R> !UnwindSafe for GetCertsState<R>
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
    T: 'a,
 
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
    T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
    T: 'a,
 
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
    T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
    T: ?Sized,
 
impl<T> BorrowMut<T> for Twhere
    T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
 
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
    T: Clone,
 
impl<T> CloneToUninit for Twhere
    T: Clone,
§impl<T> Conv for T
 
impl<T> Conv for T
§impl<T> Downcast for Twhere
    T: Any,
 
impl<T> Downcast for Twhere
    T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
 
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
 
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
 
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
 
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> DowncastSend for T
 
impl<T> DowncastSend for T
§impl<T> DowncastSync for T
 
impl<T> DowncastSync for T
§impl<T> FmtForward for T
 
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
    Self: Binary,
 
fn fmt_binary(self) -> FmtBinary<Self>where
    Self: Binary,
self to use its Binary implementation when Debug-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
    Self: Display,
 
fn fmt_display(self) -> FmtDisplay<Self>where
    Self: Display,
self to use its Display implementation when
Debug-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
    Self: LowerExp,
 
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
    Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
    Self: LowerHex,
 
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
    Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
    Self: Octal,
 
fn fmt_octal(self) -> FmtOctal<Self>where
    Self: Octal,
self to use its Octal implementation when Debug-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
    Self: Pointer,
 
fn fmt_pointer(self) -> FmtPointer<Self>where
    Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
    Self: UpperExp,
 
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
    Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
    Self: UpperHex,
 
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
    Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.§fn fmt_list(self) -> FmtList<Self>where
    &'a Self: for<'a> IntoIterator,
 
fn fmt_list(self) -> FmtList<Self>where
    &'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
 
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
 
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
 
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
 
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
 
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
 
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> Pipe for Twhere
    T: ?Sized,
 
impl<T> Pipe for Twhere
    T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
    Self: Sized,
 
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
    Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
    R: 'a,
 
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
    R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
    R: 'a,
 
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
    R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
 
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
    &'a mut self,
    func: impl FnOnce(&'a mut B) -> R,
) -> R
 
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
 
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
 
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
 
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.§impl<T> Tap for T
 
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
 
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
 
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
 
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
 
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
 
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
 
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
 
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
 
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
 
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
 
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
 
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
 
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
 
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.