socks5_impl::server::connection::associate

Struct AssociatedUdpSocket

Source
pub struct AssociatedUdpSocket { /* private fields */ }
Expand description

This is a helper for managing the associated UDP socket.

It will add the socks5 UDP header to every UDP packet it sends, also try to parse the socks5 UDP header from any UDP packet received.

The receiving buffer size for each UDP packet can be set with set_recv_buffer_size(), and be read with get_max_packet_size().

You can create this struct by using AssociatedUdpSocket::from::<(UdpSocket, usize)>(), the first element of the tuple is the UDP socket, the second element is the receiving buffer size.

This struct can also be revert into a raw tokio UDP socket with UdpSocket::from::<AssociatedUdpSocket>().

AssociatedUdpSocket can be used as the associated UDP socket.

Implementations§

Source§

impl AssociatedUdpSocket

Source

pub async fn connect<A: ToSocketAddrs>(&self, addr: A) -> Result<()>

Connects the UDP socket setting the default destination for send() and limiting packets that are read via recv from the address specified in addr.

Source

pub fn get_max_packet_size(&self) -> usize

Get the maximum UDP packet size, with socks5 UDP header included.

Source

pub fn set_max_packet_size(&self, size: usize)

Set the maximum UDP packet size, with socks5 UDP header included, for adjusting the receiving buffer size.

Source

pub async fn recv(&self) -> Result<(Bytes, u8, Address)>

Receives a socks5 UDP relay packet on the socket from the remote address to which it is connected. On success, returns the packet itself, the fragment number and the remote target address.

The connect method will connect this socket to a remote address. This method will fail if the socket is not connected.

Source

pub async fn recv_from(&self) -> Result<(Bytes, u8, Address, SocketAddr)>

Receives a socks5 UDP relay packet on the socket from the any remote address. On success, returns the packet itself, the fragment number, the remote target address and the source address.

Source

pub async fn send<P: AsRef<[u8]>>( &self, pkt: P, frag: u8, from_addr: Address, ) -> Result<usize>

Sends a UDP relay packet to the remote address to which it is connected. The socks5 UDP header will be added to the packet.

Source

pub async fn send_to<P: AsRef<[u8]>>( &self, pkt: P, frag: u8, from_addr: Address, to_addr: SocketAddr, ) -> Result<usize>

Sends a UDP relay packet to a specified remote address to which it is connected. The socks5 UDP header will be added to the packet.

Trait Implementations§

Source§

impl AsMut<UdpSocket> for AssociatedUdpSocket

Source§

fn as_mut(&mut self) -> &mut UdpSocket

Converts this type into a mutable reference of the (usually inferred) input type.
Source§

impl AsRef<UdpSocket> for AssociatedUdpSocket

Source§

fn as_ref(&self) -> &UdpSocket

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl Debug for AssociatedUdpSocket

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl From<(UdpSocket, usize)> for AssociatedUdpSocket

Source§

fn from(from: (UdpSocket, usize)) -> Self

Converts to this type from the input type.
Source§

impl From<AssociatedUdpSocket> for UdpSocket

Source§

fn from(from: AssociatedUdpSocket) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> AsAny for T
where T: Any,

Source§

fn as_any(&self) -> &(dyn Any + 'static)

Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Source§

fn type_name(&self) -> &'static str

Gets the type name of self
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> Downcast for T
where T: AsAny + ?Sized,

Source§

fn is<T>(&self) -> bool
where T: AsAny,

Returns true if the boxed type is the same as T. Read more
Source§

fn downcast_ref<T>(&self) -> Option<&T>
where T: AsAny,

Forward to the method defined on the type Any.
Source§

fn downcast_mut<T>(&mut self) -> Option<&mut T>
where T: AsAny,

Forward to the method defined on the type Any.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.