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 setInterfacefor the north direction;UdpRelay::set_bind_south_interface: to only setInterfacefor 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 setInterfacefor the north direction;UdpRelay::with_bind_south_interface: to only setInterfacefor 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 setInterfacefor both the north and south direction;UdpRelay::set_bind_south_interface: to only setInterfacefor 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 setInterfacefor both the north and south direction;UdpRelay::with_bind_south_interface: to only setInterfacefor 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 setInterfacefor both the north and south direction;UdpRelay::set_bind_north_interface: to only setInterfacefor 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 setInterfacefor both the north and south direction;UdpRelay::with_bind_north_interface: to only setInterfacefor 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> Socks5UdpAssociatorSeal<S> for UdpRelay<B, I>
impl<B, I, S> Socks5UdpAssociatorSeal<S> 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> 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> 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