Enum tor_hsclient::FailedAttemptError
source · #[non_exhaustive]pub enum FailedAttemptError {
UnusableIntro {
error: InvalidTarget,
intro_index: IntroPtIndex,
},
RendezvousCircuitObtain {
error: Error,
},
RendezvousEstablishTimeout {
rend_pt: Redacted<RelayIds>,
},
RendezvousEstablish {
error: Error,
rend_pt: Redacted<RelayIds>,
},
IntroductionCircuitObtain {
error: Error,
intro_index: IntroPtIndex,
},
IntroductionExchange {
error: Error,
intro_index: IntroPtIndex,
},
IntroductionFailed {
status: IntroduceAckStatus,
intro_index: IntroPtIndex,
},
IntroductionTimeout {
intro_index: IntroPtIndex,
},
RendezvousCompletionTimeout {
intro_index: IntroPtIndex,
rend_pt: Redacted<RelayIds>,
},
RendezvousCompletionCircuitError {
error: Error,
intro_index: IntroPtIndex,
rend_pt: Redacted<RelayIds>,
},
RendezvousCompletionHandshake {
error: Error,
intro_index: IntroPtIndex,
rend_pt: Redacted<RelayIds>,
},
Bug(Bug),
}Expand description
Error that occurred making one attempt to connect to a hidden service using an IP and RP
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
UnusableIntro
Fields
error: InvalidTargetWhy it’s not use able
intro_index: IntroPtIndexThe index of the IPT in the list of IPTs in the descriptor
Introduction point unusable because it couldn’t be used as a circuit target
RendezvousCircuitObtain
Failed to obtain any circuit to use as a rendezvous circuit
RendezvousEstablishTimeout
Creating a rendezvous circuit and rendezvous point took too long
RendezvousEstablish
Fields
Failed to establish rendezvous point
IntroductionCircuitObtain
Fields
intro_index: IntroPtIndexThe index of the IPT in the list of IPTs in the descriptor
Failed to obtain circuit to introduction point
IntroductionExchange
Fields
intro_index: IntroPtIndexThe index of the IPT in the list of IPTs in the descriptor
Introduction exchange (with the introduction point) failed
IntroductionFailed
Fields
status: IntroduceAckStatusThe status code provided by the introduction point
intro_index: IntroPtIndexThe index of the IPT in the list of IPTs in the descriptor
Introduction point reported error in its INTRODUCE_ACK
IntroductionTimeout
Fields
intro_index: IntroPtIndexThe index of the IPT in the list of IPTs in the descriptor
Communication with introduction point {intro_index} took too long
This might mean it took too long to establish a circuit to the IPT, or that the INTRODUCE exchange took too long.
RendezvousCompletionTimeout
Fields
intro_index: IntroPtIndexThe index of the IPT in the list of IPTs in the descriptor
It took too long for the rendezvous to be completed
This might be the fault of almost anyone. All we know is that we got
a successful INTRODUCE_ACK but the RENDEZVOUS2 never arrived.
RendezvousCompletionCircuitError
Fields
intro_index: IntroPtIndexThe index of the IPT in the list of IPTs in the descriptor
Error on rendezvous circuit when expecting rendezvous completion (RENDEZVOUS2)
RendezvousCompletionHandshake
Fields
intro_index: IntroPtIndexThe index of the IPT in the list of IPTs in the descriptor
Error processing rendezvous completion (RENDEZVOUS2)
This is might be the fault of the hidden service or the rendezvous point.
Bug(Bug)
Internal error
Trait Implementations§
source§impl AsRef<dyn Error> for FailedAttemptError
impl AsRef<dyn Error> for FailedAttemptError
source§impl Clone for FailedAttemptError
impl Clone for FailedAttemptError
source§fn clone(&self) -> FailedAttemptError
fn clone(&self) -> FailedAttemptError
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moresource§impl Debug for FailedAttemptError
impl Debug for FailedAttemptError
source§impl Display for FailedAttemptError
impl Display for FailedAttemptError
source§impl Error for FailedAttemptError
impl Error for FailedAttemptError
source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · source§fn description(&self) -> &str
fn description(&self) -> &str
source§impl From<Bug> for FailedAttemptError
impl From<Bug> for FailedAttemptError
source§impl HasKind for FailedAttemptError
impl HasKind for FailedAttemptError
source§impl HasRetryTime for FailedAttemptError
impl HasRetryTime for FailedAttemptError
When an attempt like this should be retried.
For error variants with an introduction point index
(FailedAttemptError::intro_index returns Some)
that’s when we might retry with that introduction point.
For error variants with a rendezvous point, that’s when we might retry with that rendezvous point.
For variants with both, we don’t know which of the introduction point or rendezvous point is implicated. Retrying earlier with one different relay out of the two relays would be reasonable, as would delaying retrying with either of the same relays.
source§fn retry_time(&self) -> RetryTime
fn retry_time(&self) -> RetryTime
source§fn abs_retry_time<F>(&self, now: Instant, choose_delay: F) -> AbsRetryTimewhere
F: FnOnce() -> Duration,
Self: Sized,
fn abs_retry_time<F>(&self, now: Instant, choose_delay: F) -> AbsRetryTimewhere F: FnOnce() -> Duration, Self: Sized,
Auto Trait Implementations§
impl !RefUnwindSafe for FailedAttemptError
impl Send for FailedAttemptError
impl Sync for FailedAttemptError
impl Unpin for FailedAttemptError
impl !UnwindSafe for FailedAttemptError
Blanket Implementations§
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
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere T: Any,
§fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>
fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>
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.§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>. Rc<Any> 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.