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: CacheUsage
The cache usage we had in mind when we began. Used to reset.
consensus_source: DocSource
Where did we get our consensus?
consensus: GetCertsConsensus
The consensus that we are trying to validate, or an error if we’ve given up on validating it.
consensus_meta: ConsensusMeta
Metadata 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: R
A 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.