pub enum OnionRouteError {
Show 41 variants
RouteHasNoHops,
EmptyRouteService,
HopCountOutOfBounds {
hop_count: usize,
max_hops: u8,
},
NotEnoughRelays {
hop_count: usize,
},
NoPermittedFirstHop,
NoLiveExit {
service: String,
},
NoExitWithTransport {
service: String,
transport: OnionExitTransport,
},
NoExitForProxyProtocol {
service: String,
protocol: String,
},
NoExitAllowsTarget {
service: String,
target: String,
},
DuplicateRouteHops,
ExitHopMismatch,
ExitServiceMismatch,
PayloadServiceMismatch {
payload_service: String,
route_service: String,
},
MissingNextHop,
CircuitPathLengthMismatch {
hop_count: usize,
edge_count: usize,
},
CellPayloadTooLarge,
InvalidCell,
ReturnEdgeConflict,
RelayTableFull,
RelayPeerTableFull,
BackwardSignerMismatch,
BackwardAccountKeyMismatch,
BackwardSessionKeyMismatch,
InvalidBackwardSignature,
ForwardReplay,
ForwardPayloadExpired,
BackwardReplay,
SequenceExhausted,
BackwardReturnIdMismatch,
UnexpectedBackwardPayload,
CircuitIdAllocationFailed,
LinkSendCancelled,
TcpOpenResponseClosed,
TcpOpenTimedOut,
UnknownTcpStream,
TcpStreamClosed,
TcpStreamBackpressure,
DuplicateTcpOpen,
UnexpectedTcpReturnPeer {
expected: Did,
actual: Did,
},
UnexpectedTcpForwardPeer {
expected: Did,
actual: Did,
},
ExitFailure(OnionExitFailure),
}Expand description
Local route/circuit failure before any user-facing rendering.
Variants§
RouteHasNoHops
A route or circuit was unexpectedly empty.
EmptyRouteService
The requested route service is empty after normalization.
HopCountOutOfBounds
The requested or constructed hop count is outside the circuit bound.
Fields
NotEnoughRelays
Route construction could not select enough relay hops.
NoPermittedFirstHop
Route construction could not select a first hop accepted by the caller.
NoLiveExit
No live exit descriptor offers the requested service.
NoExitWithTransport
Live exits advertise the service name but none use the required transport.
Fields
transport: OnionExitTransportRequired transport class.
NoExitForProxyProtocol
Live exits advertise the service transport, but none can serve the requested proxy protocol.
NoExitAllowsTarget
Live exits advertise the service and transport, but no policy allows the target.
DuplicateRouteHops
Route construction found duplicate DIDs.
ExitHopMismatch
The selected exit descriptor does not match the final encrypted hop.
ExitServiceMismatch
The selected exit does not offer the route service.
PayloadServiceMismatch
A payload service does not match its route service.
Fields
MissingNextHop
A relay layer references a missing next hop.
CircuitPathLengthMismatch
A constructed circuit path does not have exactly one edge id per hop.
Fields
CellPayloadTooLarge
A message cannot fit in the largest supported encrypted cell class.
InvalidCell
A decrypted encrypted cell has an invalid length or internal framing.
ReturnEdgeConflict
A live relay return edge already belongs to another previous hop.
RelayTableFull
The relay return table is full.
RelayPeerTableFull
One authenticated previous hop exhausted its share of the relay return table.
BackwardSignerMismatch
A backward payload signer is not the selected exit DID.
BackwardAccountKeyMismatch
A backward payload signer account key is not the selected exit key.
BackwardSessionKeyMismatch
A backward payload session key is not the selected exit session key.
InvalidBackwardSignature
A backward payload signature or freshness proof is invalid.
ForwardReplay
A forward nonce has already authorized an exit-side action.
ForwardPayloadExpired
A forward payload reached the exit after its authenticated expiry.
BackwardReplay
A backward sequence number has already delivered a client-side action.
SequenceExhausted
A circuit direction exhausted its monotonic sequence space.
BackwardReturnIdMismatch
A backward payload carries a return id that does not belong to the local client state.
UnexpectedBackwardPayload
A backward payload decoded to a shape that no client adapter may accept.
CircuitIdAllocationFailed
The runtime could not allocate a unique circuit id.
LinkSendCancelled
A queued endpoint cell lost its drain task before the overlay reported a result.
TcpOpenResponseClosed
A TCP open response channel closed before an answer.
TcpOpenTimedOut
A TCP open request timed out before the exit answered.
UnknownTcpStream
A TCP stream key is unknown to this runtime.
TcpStreamClosed
A TCP stream channel has already closed.
TcpStreamBackpressure
A TCP stream’s bounded inbound queue cannot accept another frame.
DuplicateTcpOpen
A duplicate TCP open targeted a live circuit.
UnexpectedTcpReturnPeer
A received TCP return peer differs from the selected route peer.
Fields
UnexpectedTcpForwardPeer
A received TCP forward peer differs from the selected route peer.
Fields
ExitFailure(OnionExitFailure)
An exit-reported failure reached the local route client.
Trait Implementations§
Source§impl Clone for OnionRouteError
impl Clone for OnionRouteError
Source§fn clone(&self) -> OnionRouteError
fn clone(&self) -> OnionRouteError
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for OnionRouteError
impl Debug for OnionRouteError
Source§impl Display for OnionRouteError
impl Display for OnionRouteError
impl Eq for OnionRouteError
Source§impl PartialEq for OnionRouteError
impl PartialEq for OnionRouteError
impl StructuralPartialEq for OnionRouteError
Auto Trait Implementations§
impl Freeze for OnionRouteError
impl RefUnwindSafe for OnionRouteError
impl Send for OnionRouteError
impl Sync for OnionRouteError
impl Unpin for OnionRouteError
impl UnsafeUnpin for OnionRouteError
impl UnwindSafe for OnionRouteError
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§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,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.impl<T> ErasedDestructor for Twhere
T: 'static,
impl<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§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 moreSource§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
impl<T> MaybeSend for T
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.