pub struct ProxySession { /* private fields */ }Expand description
A proxy session that forwards traffic between a client and an upstream relay. One session is created per accepted client connection.
Implementations§
Source§impl ProxySession
impl ProxySession
Sourcepub fn new(
session_id: SessionId,
config: ProxySessionConfig,
client_alpn: Vec<u8>,
observer: Arc<dyn ProxyObserver>,
hook: Arc<dyn ProxyHook>,
cancel: CancellationToken,
) -> Self
pub fn new( session_id: SessionId, config: ProxySessionConfig, client_alpn: Vec<u8>, observer: Arc<dyn ProxyObserver>, hook: Arc<dyn ProxyHook>, cancel: CancellationToken, ) -> Self
Create a new proxy session.
client_alpn should be the ALPN the listener negotiated with the
client. Pass an empty slice if unavailable (e.g., WebTransport).
Sourcepub fn counters(&self) -> Counters
pub fn counters(&self) -> Counters
This session’s slow-path counters.
Replaces the deleted process-global instrument::snapshot(). Cheap:
a read of ~12 relaxed atomics plus a 128-slot histogram scan.
A session whose hook declared Interest::NONE and whose observer
answers false to wants_events ends with
counters() == Counters::default() — that is what makes the
fast-path claim falsifiable rather than promised.
Sourcepub fn shape_stats(&self) -> ShapeStats
pub fn shape_stats(&self) -> ShapeStats
This session’s shaping statistics.
Readable while the session runs, which is the point: the
ProxySession is constructed behind an Arc before the accept task
is spawned (tests/common/mod.rs), so a scenario can sample its
classes without waiting for teardown and without a control plane.
A session with no ShapeProfile ends — and begins, and stays — at
shape_stats() == ShapeStats::default(). That is a falsifiable
claim rather than a promise only because the shaping path does move
these counters when it is entered: see
ShapeStats::objects_seen.
Allocates one Vec and one String per configured class. Cheap,
but not free — this is a reader’s call, not a data-path one.
Sourcepub async fn run(&self, client_conn: Connection) -> Result<(), ProxyError>
pub async fn run(&self, client_conn: Connection) -> Result<(), ProxyError>
Run the proxy session with a raw QUIC client connection.