Struct Binder
pub struct Binder<A, S> { /* private fields */ }socks5 only.Expand description
Only “useful” public Socks5Binder implementation,
which actually is able to accept bind requests and process them.
The Default implementation opens a new socket for accepting 1
incoming connection. Once received it will pipe the original request (source)
stream together with the received inbound stream from the secondary callee.
You can customise the Binder fully by creating it using Binder::new
or overwrite any of the default components using either or both of Binder::with_acceptor
and Binder::with_service.
Implementations§
§impl<A, S> Binder<A, S>
impl<A, S> Binder<A, S>
pub fn new(acceptor: A, service: S) -> Binder<A, S>
pub fn new(acceptor: A, service: S) -> Binder<A, S>
Create a new Binder.
In case you only wish to overwrite one of these components
you can also use a Default Binder and overwrite the specific component
using Binder::with_acceptor or Binder::with_service.
§impl<A, S> Binder<A, S>
impl<A, S> Binder<A, S>
pub fn with_acceptor<T>(self, acceptor: T) -> Binder<T, S>
pub fn with_acceptor<T>(self, acceptor: T) -> Binder<T, S>
pub fn with_service<T>(self, service: T) -> Binder<A, T>
pub fn with_service<T>(self, service: T) -> Binder<A, T>
pub fn with_bind_address(self, addr: impl Into<SocketAddress>) -> Binder<A, S>
pub fn with_bind_address(self, addr: impl Into<SocketAddress>) -> Binder<A, S>
Define the SocketAddress to bind to.
By default it will use the client’s requested bind address, which is in many cases not what you want.
pub fn set_bind_address(
&mut self,
addr: impl Into<SocketAddress>,
) -> &mut Binder<A, S>
pub fn set_bind_address( &mut self, addr: impl Into<SocketAddress>, ) -> &mut Binder<A, S>
Define the SocketAddress to bind to.
By default it will use the client’s requested bind address, which is in many cases not what you want.
pub fn with_default_bind_address(self) -> Binder<A, S>
pub fn with_default_bind_address(self) -> Binder<A, S>
Define the default SocketAddress to bind to (0.0.0.0:0).
By default it will use the client’s requested bind address, which is in many cases not what you want.
pub fn set_default_bind_address(&mut self) -> &mut Binder<A, S>
pub fn set_default_bind_address(&mut self) -> &mut Binder<A, S>
Define the default SocketAddress to bind to (0.0.0.0:0).
By default it will use the client’s requested bind address, which is in many cases not what you want.
pub fn maybe_with_accept_timeout(
self,
timeout: Option<Duration>,
) -> Binder<A, S>
pub fn maybe_with_accept_timeout( self, timeout: Option<Duration>, ) -> Binder<A, S>
Define the accept timeout for this socks5 bind server.
pub fn maybe_set_accept_timeout(
&mut self,
timeout: Option<Duration>,
) -> &mut Binder<A, S>
pub fn maybe_set_accept_timeout( &mut self, timeout: Option<Duration>, ) -> &mut Binder<A, S>
Define the accept timeout for this socks5 bind server.
pub fn with_accept_timeout(self, timeout: Duration) -> Binder<A, S>
pub fn with_accept_timeout(self, timeout: Duration) -> Binder<A, S>
Define the accept timeout for this socks5 bind server.
pub fn set_accept_timeout(&mut self, timeout: Duration) -> &mut Binder<A, S>
pub fn set_accept_timeout(&mut self, timeout: Duration) -> &mut Binder<A, S>
Define the accept timeout for this socks5 bind server.
pub fn without_accept_timeout(self) -> Binder<A, S>
pub fn without_accept_timeout(self) -> Binder<A, S>
Define the accept timeout for this socks5 bind server.
pub fn unset_accept_timeout(&mut self) -> &mut Binder<A, S>
pub fn unset_accept_timeout(&mut self) -> &mut Binder<A, S>
Define the accept timeout for this socks5 bind server.
§impl Binder<Timeout<DefaultAcceptorFactory, LayerErrorStatic<Elapsed>>, IoForwardService>
impl Binder<Timeout<DefaultAcceptorFactory, LayerErrorStatic<Elapsed>>, IoForwardService>
pub fn default_with_exec(
exec: Executor,
) -> Binder<Timeout<DefaultAcceptorFactory, LayerErrorStatic<Elapsed>>, IoForwardService>
pub fn default_with_exec( exec: Executor, ) -> Binder<Timeout<DefaultAcceptorFactory, LayerErrorStatic<Elapsed>>, IoForwardService>
Create a DefaultBinder whose forward bridge observes graceful
shutdown via the given Executor.
Trait Implementations§
§impl Default for Binder<Timeout<DefaultAcceptorFactory, LayerErrorStatic<Elapsed>>, IoForwardService>
impl Default for Binder<Timeout<DefaultAcceptorFactory, LayerErrorStatic<Elapsed>>, IoForwardService>
§fn default() -> Binder<Timeout<DefaultAcceptorFactory, LayerErrorStatic<Elapsed>>, IoForwardService>
fn default() -> Binder<Timeout<DefaultAcceptorFactory, LayerErrorStatic<Elapsed>>, IoForwardService>
§impl<S, F, StreamService> Socks5BinderSeal<S> for Binder<F, StreamService>where
S: Io + Unpin,
F: SocketService,
<F as SocketService>::Socket: Acceptor,
<<F as SocketService>::Socket as Acceptor>::Stream: Unpin,
StreamService: Service<BridgeIo<S, <<F as SocketService>::Socket as Acceptor>::Stream>>,
<StreamService as Service<BridgeIo<S, <<F as SocketService>::Socket as Acceptor>::Stream>>>::Error: Into<Box<dyn Error + Send + Sync>>,
impl<S, F, StreamService> Socks5BinderSeal<S> for Binder<F, StreamService>where
S: Io + Unpin,
F: SocketService,
<F as SocketService>::Socket: Acceptor,
<<F as SocketService>::Socket as Acceptor>::Stream: Unpin,
StreamService: Service<BridgeIo<S, <<F as SocketService>::Socket as Acceptor>::Stream>>,
<StreamService as Service<BridgeIo<S, <<F as SocketService>::Socket as Acceptor>::Stream>>>::Error: Into<Box<dyn Error + Send + Sync>>,
async fn accept_bind( &self, ingress_stream: S, requested_bind_address: HostWithPort, ) -> Result<(), Error>
Auto Trait Implementations§
impl<A, S> Freeze for Binder<A, S>
impl<A, S> RefUnwindSafe for Binder<A, S>where
A: RefUnwindSafe,
S: RefUnwindSafe,
impl<A, S> Send for Binder<A, S>
impl<A, S> Sync for Binder<A, S>
impl<A, S> Unpin for Binder<A, S>
impl<A, S> UnsafeUnpin for Binder<A, S>where
A: UnsafeUnpin,
S: UnsafeUnpin,
impl<A, S> UnwindSafe for Binder<A, S>where
A: UnwindSafe,
S: UnwindSafe,
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
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> ErasedDestructor for Twhere
T: 'static,
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
§fn with_current_context(self) -> WithContext<Self> ⓘ
fn with_current_context(self) -> WithContext<Self> ⓘ
§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> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a rama_grpc::Request§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> Pointable for T
impl<T> Pointable for T
§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§fn and<P, B, E>(self, other: P) -> And<T, P>
fn and<P, B, E>(self, other: P) -> And<T, P>
Policy that returns Action::Follow only if self and other return
Action::Follow. Read more§impl<T, U> RamaTryFrom<T> for Uwhere
U: TryFrom<T>,
impl<T, U> RamaTryFrom<T> for Uwhere
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
fn rama_try_from(value: T) -> Result<U, <U as RamaTryFrom<T>>::Error>
§impl<T, U, CrateMarker> RamaTryInto<U, CrateMarker> for Twhere
U: RamaTryFrom<T, CrateMarker>,
impl<T, U, CrateMarker> RamaTryInto<U, CrateMarker> for Twhere
U: RamaTryFrom<T, CrateMarker>,
type Error = <U as RamaTryFrom<T, CrateMarker>>::Error
fn rama_try_into(self) -> Result<U, <U as RamaTryFrom<T, CrateMarker>>::Error>
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
impl<S, C> Socks5Binder<S> for Cwhere
C: Socks5BinderSeal<S>,
§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.