Skip to main content

ChainEngine

Struct ChainEngine 

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

Routes outbound TCP connections through a configurable chain of proxies.

Implementations§

Source§

impl ChainEngine

Source

pub fn new(config: ChainConfig) -> Self

Create a new engine from config.

Source

pub fn rr_peek_offset(&self) -> usize

Return the current round-robin offset without advancing it.

Useful for inspection and benchmarking; the value may change concurrently and is only a snapshot.

Source

pub async fn connect(&self, target: Target) -> Result<BoxStream>

Open a connection to target through the proxy chain.

If the target matches a localnet rule, a direct connection is made. DNAT rewrites are applied before localnet and proxy selection.

For Random and RoundRobin chains, the selection is retried up to chain_retries additional times (with a fresh random/rotating slice each attempt) before giving up.

Returns a BoxStream so that TLS-wrapped hops (HTTPS proxies) and plain TCP hops share the same return type.

Source

pub fn apply_dnat(&self, target: Target) -> Target

Apply DNAT rewrite rules to target.

Returns the rewritten target, or target unchanged if no rule matches.

Source

pub fn is_localnet(&self, target: &Target) -> bool

Check whether target matches any localnet exclusion rule.

Returns true when the connection should bypass the proxy chain and connect directly.

Source

pub fn live_proxy_refs(&self) -> Vec<&ProxyEntry>

Return references to all proxies that have not been marked dead.

Falls back to the full proxy list if every proxy is dead, so that callers always have at least one candidate to try.

Source

pub fn record_failure(&self, proxy: &ProxyEntry)

Increment the failure counter for proxy. No-op when proxy_dead_threshold == 0.

Callers may use this to pre-populate the dead-proxy state (e.g. from persistent storage between process restarts) or to manually evict a known-bad proxy.

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> 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, 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