Loading crates/tor-hsservice/src/err.rs +19 −0 Original line number Diff line number Diff line Loading @@ -67,6 +67,25 @@ pub enum ClientError { /// Failed to complete a rendezvous request. #[error("Could not connect rendezvous circuit.")] EstablishSession(#[source] EstablishSessionError), /// Failed to send a CONNECTED message and get a stream. #[error("Could not accept stream from rendezvous circuit")] AcceptStream(#[source] tor_proto::Error), /// Failed to send a END message and reject a stream. #[error("Could not reject stream from rendezvous circuit")] RejectStream(#[source] tor_proto::Error), } impl HasKind for ClientError { fn kind(&self) -> ErrorKind { match self { ClientError::BadIntroduce(e) => e.kind(), ClientError::EstablishSession(e) => e.kind(), ClientError::AcceptStream(e) => e.kind(), ClientError::RejectStream(e) => e.kind(), } } } /// An error which means we cannot continue to try to operate an onion service. Loading crates/tor-hsservice/src/svc/rend_handshake.rs +31 −1 Original line number Diff line number Diff line Loading @@ -15,7 +15,7 @@ use tor_circmgr::{ build::circparameters_from_netparameters, hspool::{HsCircKind, HsCircPool}, }; use tor_error::into_internal; use tor_error::{into_internal, HasKind}; use tor_linkspec::{ decode::Strictness, verbatim::VerbatimLinkSpecCircTarget, CircTarget as _, OwnedChanTargetBuilder, OwnedCircTarget, Loading Loading @@ -51,6 +51,18 @@ pub enum IntroRequestError { InvalidLinkSpecs(#[source] tor_linkspec::decode::ChanTargetDecodeError), } impl HasKind for IntroRequestError { fn kind(&self) -> tor_error::ErrorKind { use tor_error::ErrorKind as EK; use IntroRequestError as E; match self { E::InvalidHandshake(e) => e.kind(), E::InvalidPayload(_) => EK::RemoteProtocolViolation, E::InvalidLinkSpecs(_) => EK::RemoteProtocolViolation, } } } /// An error produced while trying to connect to a rendezvous point and open a /// session with a client. #[derive(Debug, Clone, thiserror::Error)] Loading Loading @@ -87,6 +99,24 @@ pub enum EstablishSessionError { Bug(#[from] tor_error::Bug), } impl HasKind for EstablishSessionError { fn kind(&self) -> tor_error::ErrorKind { use tor_error::ErrorKind as EK; use EstablishSessionError as E; match self { E::NetdirUnavailable(e) => e.kind(), E::UnsupportedOnionKey => EK::RemoteProtocolViolation, // TODO HSS Not quite right. EstablishSessionError::RendCirc(e) => EK::RemoteNetworkTimeout, EstablishSessionError::VirtualHop(e) => e.kind(), EstablishSessionError::AcceptBegins(e) => e.kind(), EstablishSessionError::SendRendezvous(e) => e.kind(), EstablishSessionError::ImpossibleIds(_) => EK::RemoteProtocolViolation, EstablishSessionError::Bug(e) => e.kind(), } } } /// A decrypted request from an onion service client which we can /// choose to answer (or not). /// Loading Loading
crates/tor-hsservice/src/err.rs +19 −0 Original line number Diff line number Diff line Loading @@ -67,6 +67,25 @@ pub enum ClientError { /// Failed to complete a rendezvous request. #[error("Could not connect rendezvous circuit.")] EstablishSession(#[source] EstablishSessionError), /// Failed to send a CONNECTED message and get a stream. #[error("Could not accept stream from rendezvous circuit")] AcceptStream(#[source] tor_proto::Error), /// Failed to send a END message and reject a stream. #[error("Could not reject stream from rendezvous circuit")] RejectStream(#[source] tor_proto::Error), } impl HasKind for ClientError { fn kind(&self) -> ErrorKind { match self { ClientError::BadIntroduce(e) => e.kind(), ClientError::EstablishSession(e) => e.kind(), ClientError::AcceptStream(e) => e.kind(), ClientError::RejectStream(e) => e.kind(), } } } /// An error which means we cannot continue to try to operate an onion service. Loading
crates/tor-hsservice/src/svc/rend_handshake.rs +31 −1 Original line number Diff line number Diff line Loading @@ -15,7 +15,7 @@ use tor_circmgr::{ build::circparameters_from_netparameters, hspool::{HsCircKind, HsCircPool}, }; use tor_error::into_internal; use tor_error::{into_internal, HasKind}; use tor_linkspec::{ decode::Strictness, verbatim::VerbatimLinkSpecCircTarget, CircTarget as _, OwnedChanTargetBuilder, OwnedCircTarget, Loading Loading @@ -51,6 +51,18 @@ pub enum IntroRequestError { InvalidLinkSpecs(#[source] tor_linkspec::decode::ChanTargetDecodeError), } impl HasKind for IntroRequestError { fn kind(&self) -> tor_error::ErrorKind { use tor_error::ErrorKind as EK; use IntroRequestError as E; match self { E::InvalidHandshake(e) => e.kind(), E::InvalidPayload(_) => EK::RemoteProtocolViolation, E::InvalidLinkSpecs(_) => EK::RemoteProtocolViolation, } } } /// An error produced while trying to connect to a rendezvous point and open a /// session with a client. #[derive(Debug, Clone, thiserror::Error)] Loading Loading @@ -87,6 +99,24 @@ pub enum EstablishSessionError { Bug(#[from] tor_error::Bug), } impl HasKind for EstablishSessionError { fn kind(&self) -> tor_error::ErrorKind { use tor_error::ErrorKind as EK; use EstablishSessionError as E; match self { E::NetdirUnavailable(e) => e.kind(), E::UnsupportedOnionKey => EK::RemoteProtocolViolation, // TODO HSS Not quite right. EstablishSessionError::RendCirc(e) => EK::RemoteNetworkTimeout, EstablishSessionError::VirtualHop(e) => e.kind(), EstablishSessionError::AcceptBegins(e) => e.kind(), EstablishSessionError::SendRendezvous(e) => e.kind(), EstablishSessionError::ImpossibleIds(_) => EK::RemoteProtocolViolation, EstablishSessionError::Bug(e) => e.kind(), } } } /// A decrypted request from an onion service client which we can /// choose to answer (or not). /// Loading