Skip to main content

ConnectionTracker

Struct ConnectionTracker 

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

Tracks TCP connections between guest and proxy tasks.

Each guest TCP connection maps to a smoltcp socket and a pair of channels connecting it to a tokio proxy task. The tracker handles:

  • Socket creation — on SYN detection, before smoltcp processes the frame.
  • Data relay — shuttles bytes between smoltcp sockets and channels.
  • Lifecycle detection — identifies newly-established connections for proxy spawning.
  • Cleanup — removes closed sockets from the socket set.

Implementations§

Source§

impl ConnectionTracker

Source

pub fn new(max_connections: Option<usize>) -> Self

Create a new tracker with the given connection limit.

Source

pub fn has_socket_for(&self, src: &SocketAddr, dst: &SocketAddr) -> bool

Returns true if a tracked socket already exists for this exact connection (same source AND destination). O(1) via HashSet lookup.

Source

pub fn create_tcp_socket( &mut self, src: SocketAddr, dst: SocketAddr, sockets: &mut SocketSet<'_>, ) -> bool

Create a smoltcp TCP socket for an incoming SYN and register it.

The socket is put into LISTEN state on the destination IP + port so smoltcp will complete the three-way handshake when it processes the SYN frame. Binding to the specific destination IP (not just port) prevents socket dispatch ambiguity when multiple connections target different IPs on the same port.

Returns false if at max_connections limit.

Source

pub fn relay_data(&mut self, sockets: &mut SocketSet<'_>)

Relay data between smoltcp sockets and proxy task channels.

For each connection with a spawned proxy:

  • Reads data from the smoltcp socket and sends it to the proxy channel.
  • Receives data from the proxy channel and writes it to the smoltcp socket.
Source

pub fn take_new_connections( &mut self, sockets: &mut SocketSet<'_>, ) -> Vec<NewConnection>

Collect newly-established connections that need proxy tasks.

Returns a list of NewConnection structs containing the channel ends for the proxy task. The poll loop is responsible for spawning the task.

Source

pub fn cleanup_closed(&mut self, sockets: &mut SocketSet<'_>)

Remove closed connections and their sockets.

Only removes sockets in the Closed state. Sockets in TimeWait are left for smoltcp to handle naturally (2*MSL timer), preventing delayed duplicate segments from being accepted by a reused port.

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_mut_any(&mut self) -> &mut (dyn Any + 'static)

Source§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more