Struct UdpRelay
pub struct UdpRelay<B, I> { /* private fields */ }
Expand description
Only “useful” public Socks5UdpAssociator
implementation,
which actually is able to accept udp-relay requests and process them.
The Default
implementation opens a new (udp) socket for accepting 1
incoming connection. Once received it will relay incoming packets
to the target udp socket and relay received packets from the latter
back to the socks5 server cient. Prefixing these upd packets
using [UdpHeader
].
You can customise the UdpRelay
fully by creating it using UdpRelay::new
or overwrite any of the default components using either or both of UdpRelay::with_binder
and [Binder::with_inspector
].
Implementations§
§impl<B> UdpRelay<B, DirectUdpRelay>
impl<B> UdpRelay<B, DirectUdpRelay>
pub fn new(binder: B) -> UdpRelay<B, DirectUdpRelay>
pub fn new(binder: B) -> UdpRelay<B, DirectUdpRelay>
Create a new UdpRelay
.
pub fn with_sync_inspector<T>(
self,
inspector: T,
) -> UdpRelay<B, SyncUdpInspector<T>>
pub fn with_sync_inspector<T>( self, inspector: T, ) -> UdpRelay<B, SyncUdpInspector<T>>
Overwrite the [Connector
]’s [Inspector
]
that can be used to inspect / modify a udp packet to be relayed synchronously.
pub fn with_async_inspector<T>(
self,
inspector: T,
) -> UdpRelay<B, AsyncUdpInspector<T>>
pub fn with_async_inspector<T>( self, inspector: T, ) -> UdpRelay<B, AsyncUdpInspector<T>>
Overwrite the [Connector
]’s [Inspector
]
that can be used to inspect / modify a udp packet to be relayed asynchronously.
§impl<B, I> UdpRelay<B, I>
impl<B, I> UdpRelay<B, I>
pub fn with_binder<T>(self, binder: T) -> UdpRelay<T, I>
pub fn with_binder<T>(self, binder: T) -> UdpRelay<T, I>
Overwrite the UdpRelay
’s [UdpBinder
],
used to open a socket, return the address and
wait for an incoming connection which it will return.
pub fn set_bind_interface(
&mut self,
interface: impl Into<Interface>,
) -> &mut UdpRelay<B, I>
pub fn set_bind_interface( &mut self, interface: impl Into<Interface>, ) -> &mut UdpRelay<B, I>
Define the (network) Interface
to bind to, for both north and south direction.
Use:
UdpRelay::set_bind_north_interface
: to only setInterface
for the north direction;UdpRelay::set_bind_south_interface
: to only setInterface
for the south direction.
By default it binds the udp sockets at 0.0.0.0:0
.
pub fn with_bind_interface(
self,
interface: impl Into<Interface>,
) -> UdpRelay<B, I>
pub fn with_bind_interface( self, interface: impl Into<Interface>, ) -> UdpRelay<B, I>
Define the (network) Interface
to bind to, for both north and south direction.
Use:
UdpRelay::with_bind_north_interface
: to only setInterface
for the north direction;UdpRelay::with_bind_south_interface
: to only setInterface
for the south direction.
By default it binds the udp sockets at 0.0.0.0:0
.
pub fn set_bind_north_interface(
&mut self,
interface: impl Into<Interface>,
) -> &mut UdpRelay<B, I>
pub fn set_bind_north_interface( &mut self, interface: impl Into<Interface>, ) -> &mut UdpRelay<B, I>
Define the (network) Interface
to bind to, for the north direction.
Use:
UdpRelay::set_bind_interface
: to only setInterface
for both the north and south direction;UdpRelay::set_bind_south_interface
: to only setInterface
for the south direction.
By default it binds the udp sockets at 0.0.0.0:0
.
pub fn with_bind_north_interface(
self,
interface: impl Into<Interface>,
) -> UdpRelay<B, I>
pub fn with_bind_north_interface( self, interface: impl Into<Interface>, ) -> UdpRelay<B, I>
Define the (network) Interface
to bind to, for the north direction.
Use:
UdpRelay::with_bind_interface
: to only setInterface
for both the north and south direction;UdpRelay::with_bind_south_interface
: to only setInterface
for the south direction.
By default it binds the udp sockets at 0.0.0.0:0
.
pub fn set_bind_south_interface(
&mut self,
interface: impl Into<Interface>,
) -> &mut UdpRelay<B, I>
pub fn set_bind_south_interface( &mut self, interface: impl Into<Interface>, ) -> &mut UdpRelay<B, I>
Define the (network) Interface
to bind to, for the south direction.
Use:
UdpRelay::set_bind_interface
: to only setInterface
for both the north and south direction;UdpRelay::set_bind_north_interface
: to only setInterface
for the north direction.
By default it binds the udp sockets at 0.0.0.0:0
.
pub fn with_bind_south_interface(
self,
interface: impl Into<Interface>,
) -> UdpRelay<B, I>
pub fn with_bind_south_interface( self, interface: impl Into<Interface>, ) -> UdpRelay<B, I>
Define the (network) Interface
to bind to, for the south direction.
Use:
UdpRelay::with_bind_interface
: to only setInterface
for both the north and south direction;UdpRelay::with_bind_north_interface
: to only setInterface
for the north direction.
By default it binds the udp sockets at 0.0.0.0:0
.
pub fn set_buffer_size_south(&mut self, n: usize) -> &mut UdpRelay<B, I>
pub fn set_buffer_size_south(&mut self, n: usize) -> &mut UdpRelay<B, I>
Set the size of the buffer used to read south traffic.
Use:
UdpRelay::set_buffer_size
: to only set the buffer size for both the north and south direction;UdpRelay::set_buffer_size_north
: to only set the buffer size for the north direction.
pub fn set_buffer_size_north(&mut self, n: usize) -> &mut UdpRelay<B, I>
pub fn set_buffer_size_north(&mut self, n: usize) -> &mut UdpRelay<B, I>
Set the size of the buffer used to read north traffic.
Use:
UdpRelay::set_buffer_size
: to only set the buffer size for both the north and south direction;UdpRelay::set_buffer_size_south
: to only set the buffer size for the south direction.
pub fn set_buffer_size(&mut self, n: usize) -> &mut UdpRelay<B, I>
pub fn set_buffer_size(&mut self, n: usize) -> &mut UdpRelay<B, I>
Set the size of the buffer used to read both north and south traffic.
Use:
UdpRelay::set_buffer_size_north
: to only set the buffer size for the north direction.UdpRelay::set_buffer_size_south
: to only set the buffer size for the south direction.
pub fn with_buffer_size_south(self, n: usize) -> UdpRelay<B, I>
pub fn with_buffer_size_south(self, n: usize) -> UdpRelay<B, I>
Set the size of the buffer used to read south traffic.
Use:
UdpRelay::with_buffer_size
: to only set the buffer size for both the north and south direction;UdpRelay::with_buffer_size_north
: to only set the buffer size for the north direction.
pub fn with_buffer_size_north(self, n: usize) -> UdpRelay<B, I>
pub fn with_buffer_size_north(self, n: usize) -> UdpRelay<B, I>
Set the size of the buffer used to read north traffic.
Use:
UdpRelay::with_buffer_size
: to only set the buffer size for both the north and south direction;UdpRelay::with_buffer_size_south
: to only set the buffer size for the south direction.
pub fn with_buffer_size(self, n: usize) -> UdpRelay<B, I>
pub fn with_buffer_size(self, n: usize) -> UdpRelay<B, I>
Set the size of the buffer used to read both north and south traffic.
Use:
UdpRelay::with_buffer_size_north
: to only set the buffer size for the north direction.UdpRelay::with_buffer_size_south
: to only set the buffer size for the south direction.
pub fn set_relay_timeout(
&mut self,
relay_timeout: Duration,
) -> &mut UdpRelay<B, I>
pub fn set_relay_timeout( &mut self, relay_timeout: Duration, ) -> &mut UdpRelay<B, I>
Set field with Some(value)
pub fn with_relay_timeout(self, relay_timeout: Duration) -> UdpRelay<B, I>
pub fn with_relay_timeout(self, relay_timeout: Duration) -> UdpRelay<B, I>
Replace field with Some(value)
pub fn maybe_with_relay_timeout(
self,
relay_timeout: Option<Duration>,
) -> UdpRelay<B, I>
pub fn maybe_with_relay_timeout( self, relay_timeout: Option<Duration>, ) -> UdpRelay<B, I>
Replace field with the provided option
§impl<B, I> UdpRelay<B, I>
impl<B, I> UdpRelay<B, I>
pub fn with_default_dns_resolver(self) -> UdpRelay<B, I>
pub fn with_default_dns_resolver(self) -> UdpRelay<B, I>
Attach a the Default
DnsResolver
to this UdpRelay
.
It will be used to best-effort resolve the domain name, in case a domain name is passed to forward to the target server.
pub fn set_default_dns_resolver(&mut self) -> &mut UdpRelay<B, I>
pub fn set_default_dns_resolver(&mut self) -> &mut UdpRelay<B, I>
Attach a the Default
DnsResolver
to this UdpRelay
.
It will be used to best-effort resolve the domain name, in case a domain name is passed to forward to the target server.
pub fn with_dns_resolver(
self,
resolver: impl DnsResolver<Error = OpaqueError>,
) -> UdpRelay<B, I>
pub fn with_dns_resolver( self, resolver: impl DnsResolver<Error = OpaqueError>, ) -> UdpRelay<B, I>
Attach a DnsResolver
to this UdpRelay
.
It will be used to best-effort resolve the domain name, in case a domain name is passed to forward to the target server.
pub fn set_dns_resolver(
&mut self,
resolver: impl DnsResolver<Error = OpaqueError>,
) -> &mut UdpRelay<B, I>
pub fn set_dns_resolver( &mut self, resolver: impl DnsResolver<Error = OpaqueError>, ) -> &mut UdpRelay<B, I>
Attach a DnsResolver
to this UdpRelay
.
It will be used to best-effort resolve the domain name, in case a domain name is passed to forward to the target server.
Trait Implementations§
§impl Default for UdpRelay<Timeout<DefaultUdpBinder, LayerErrorStatic<Elapsed>>, DirectUdpRelay>
impl Default for UdpRelay<Timeout<DefaultUdpBinder, LayerErrorStatic<Elapsed>>, DirectUdpRelay>
§fn default() -> UdpRelay<Timeout<DefaultUdpBinder, LayerErrorStatic<Elapsed>>, DirectUdpRelay>
fn default() -> UdpRelay<Timeout<DefaultUdpBinder, LayerErrorStatic<Elapsed>>, DirectUdpRelay>
§impl<B, I, S, State> Socks5UdpAssociatorSeal<S, State> for UdpRelay<B, I>
impl<B, I, S, State> Socks5UdpAssociatorSeal<S, State> for UdpRelay<B, I>
Auto Trait Implementations§
impl<B, I> Freeze for UdpRelay<B, I>
impl<B, I> !RefUnwindSafe for UdpRelay<B, I>
impl<B, I> Send for UdpRelay<B, I>
impl<B, I> Sync for UdpRelay<B, I>
impl<B, I> Unpin for UdpRelay<B, I>
impl<B, I> !UnwindSafe for UdpRelay<B, I>
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> 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> 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> 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<S, P, B, E>(self, other: P) -> And<T, P>
fn and<S, 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> RamaTryInto<U> for Twhere
U: RamaTryFrom<T>,
impl<T, U> RamaTryInto<U> for Twhere
U: RamaTryFrom<T>,
type Error = <U as RamaTryFrom<T>>::Error
fn rama_try_into(self) -> Result<U, <U as RamaTryFrom<T>>::Error>
§impl<T, U> RamaTryInto<U> for Twhere
U: RamaTryFrom<T>,
impl<T, U> RamaTryInto<U> for Twhere
U: RamaTryFrom<T>,
type Error = <U as RamaTryFrom<T>>::Error
fn rama_try_into(self) -> Result<U, <U as RamaTryFrom<T>>::Error>
§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.