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 UdpRelay::with_binder,
UdpRelay::with_sync_inspector and UdpRelay::with_async_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 UdpRelay’s SyncUdpInspector UdpInspector
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 UdpRelay’s AsyncUdpInspector Service
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 bind `SocketService,
used to open a socket, return the address and
wait for an incoming connection which it will return.
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.
By default it binds the udp sockets at 0.0.0.0:0.
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.
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.
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.
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.
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.
By default it binds the udp sockets at 0.0.0.0:0.
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.
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.
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.
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.
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.
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.
pub fn maybe_with_relay_timeout(
self,
timeout: Option<Duration>,
) -> UdpRelay<B, I>
pub fn maybe_with_relay_timeout( self, timeout: Option<Duration>, ) -> UdpRelay<B, I>
Define the relay timeout for this socks5 UDP server.
pub fn maybe_set_relay_timeout(
&mut self,
timeout: Option<Duration>,
) -> &mut UdpRelay<B, I>
pub fn maybe_set_relay_timeout( &mut self, timeout: Option<Duration>, ) -> &mut UdpRelay<B, I>
Define the relay timeout for this socks5 UDP server.
pub fn with_relay_timeout(self, timeout: Duration) -> UdpRelay<B, I>
pub fn with_relay_timeout(self, timeout: Duration) -> UdpRelay<B, I>
Define the relay timeout for this socks5 UDP server.
pub fn set_relay_timeout(&mut self, timeout: Duration) -> &mut UdpRelay<B, I>
pub fn set_relay_timeout(&mut self, timeout: Duration) -> &mut UdpRelay<B, I>
Define the relay timeout for this socks5 UDP server.
pub fn without_relay_timeout(self) -> UdpRelay<B, I>
pub fn without_relay_timeout(self) -> UdpRelay<B, I>
Define the relay timeout for this socks5 UDP server.
pub fn unset_relay_timeout(&mut self) -> &mut UdpRelay<B, I>
pub fn unset_relay_timeout(&mut self) -> &mut UdpRelay<B, I>
Define the relay timeout for this socks5 UDP server.
§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>
async fn accept_udp_associate( &self, stream: S, destination: HostWithPort, ) -> Result<(), Error>
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> 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> 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