#[non_exhaustive]pub enum Error {
Show 30 variants
BytesErr {
object: &'static str,
err: Error,
},
ChanIoErr(Arc<Error>),
HandshakeIoErr(Arc<Error>),
CellEncodeErr {
object: &'static str,
err: Error,
},
CellDecodeErr {
object: &'static str,
err: Error,
},
EncodeErr {
object: &'static str,
err: EncodeError,
},
HandshakeCertErr(CertError),
InvalidKDFOutputLength,
NoSuchHop,
BadCellAuth,
BadCircHandshakeAuth,
HandshakeProto(String),
HandshakeCertsExpired {
expired_by: Duration,
},
ChanProto(String),
CircProto(String),
ChannelClosed(ChannelClosed),
CircuitClosed,
IdRangeFull,
IdUnavailable(StreamId),
StreamIdZero,
CircRefused(&'static str),
BadStreamAddress,
EndReceived(EndReason),
NotConnected,
StreamProto(String),
ChanMismatch(String),
Bug(Bug),
ResolveError(ResolveError),
MissingId(RelayIdType),
Memquota(Error),
}
Expand description
An error type for the tor-proto crate.
This type should probably be split into several. There’s more than one kind of error that can occur while doing something with the Tor protocol.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
BytesErr
An error that occurred in the tor_bytes crate while decoding an object.
Fields
ChanIoErr(Arc<Error>)
An error that occurred from the io system when using a channel.
HandshakeIoErr(Arc<Error>)
An error from the io system that occurred when trying to connect a channel.
CellEncodeErr
An error occurred while trying to create or encode a cell.
Fields
CellDecodeErr
An error occurred while trying to decode or parse a cell.
EncodeErr
An error occurred while trying to create or encode some non-cell message.
This is likely the result of a bug: either in this crate, or the code that provided the input.
Fields
err: EncodeError
The error that occurred.
HandshakeCertErr(CertError)
We found a problem with one of the certificates in the channel handshake.
InvalidKDFOutputLength
We tried to produce too much output for a key derivation function.
NoSuchHop
We tried to encrypt a message to a hop that wasn’t there.
BadCellAuth
The authentication information on this cell was completely wrong, or the cell was corrupted.
BadCircHandshakeAuth
A circuit-extension handshake failed due to a mismatched authentication value.
HandshakeProto(String)
Handshake protocol violation.
HandshakeCertsExpired
Handshake broken, maybe due to clock skew.
(If the problem can’t be due to clock skew, we return HandshakeProto instead.)
ChanProto(String)
Protocol violation at the channel level, other than at the handshake stage.
CircProto(String)
Protocol violation at the circuit level
ChannelClosed(ChannelClosed)
Channel is closed, or became closed while we were trying to do some operation.
CircuitClosed
Circuit is closed, or became closed while we were trying to so some operation.
IdRangeFull
Can’t allocate any more circuit or stream IDs on a channel.
Received a stream request with a stream ID that is already in use for another stream.
StreamIdZero
Received a cell with a stream ID of zero.
CircRefused(&'static str)
Couldn’t extend a circuit because the extending relay or the target relay refused our request.
BadStreamAddress
Tried to make or use a stream to an invalid destination address.
EndReceived(EndReason)
Received an End cell from the other end of a stream.
NotConnected
Stream was already closed when we tried to use it.
StreamProto(String)
Stream protocol violation
ChanMismatch(String)
Channel does not match target
Bug(Bug)
There was a programming error somewhere in our code, or the calling code.
ResolveError(ResolveError)
Remote DNS lookup failed.
MissingId(RelayIdType)
We tried to do something with a that we couldn’t, because of an identity key type that the relay doesn’t have.
Memquota(Error)
Memory quota error
Implementations§
Source§impl Error
impl Error
Sourcepub(crate) fn from_cell_enc(err: Error, object: &'static str) -> Error
pub(crate) fn from_cell_enc(err: Error, object: &'static str) -> Error
Create an error from a tor_cell error that has occurred while trying to
encode or create something of type object
Sourcepub(crate) fn from_cell_dec(err: Error, object: &'static str) -> Error
pub(crate) fn from_cell_dec(err: Error, object: &'static str) -> Error
Create an error from a tor_cell error that has occurred while trying to
decode something of type object
Sourcepub(crate) fn from_bytes_err(err: Error, object: &'static str) -> Error
pub(crate) fn from_bytes_err(err: Error, object: &'static str) -> Error
Create an error for a tor_bytes error that occurred while parsing
something of type object
.
Sourcepub(crate) fn from_bytes_enc(err: EncodeError, object: &'static str) -> Error
pub(crate) fn from_bytes_enc(err: EncodeError, object: &'static str) -> Error
Create an error for a tor_bytes error that occurred while encoding
something of type object
.
Trait Implementations§
Source§impl Error for Error
impl Error for Error
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<ChannelClosed> for Error
impl From<ChannelClosed> for Error
Source§fn from(source: ChannelClosed) -> Self
fn from(source: ChannelClosed) -> Self
Source§impl From<Error> for ReactorError
impl From<Error> for ReactorError
Source§fn from(e: Error) -> ReactorError
fn from(e: Error) -> ReactorError
Auto Trait Implementations§
impl Freeze for Error
impl !RefUnwindSafe for Error
impl Send for Error
impl Sync for Error
impl Unpin for Error
impl !UnwindSafe for Error
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>
. 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.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<E> ErrorReport for Ewhere
E: Error + 'static,
impl<E> ErrorReport for Ewhere
E: Error + 'static,
Source§fn report(&self) -> Report<ReportHelper<'_>>
fn report(&self) -> Report<ReportHelper<'_>>
§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.