Skip to main content

Session

Struct Session 

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

One session with one pilot: a WebTransport session over QUIC, or, when no direct path connected, the same datagrams and control stream carried through the cloud relay. The engine sees one type either way; only Session::kind tells them apart, and it is reported to the pilot rather than hidden.

Implementations§

Source§

impl Session

Source

pub async fn relay( id: u64, url: &str, session_id: &str, token: &str, send_buffer_capacity: usize, ) -> Result<Session>

Open a relayed session through the cloud (ADR 0010). url, session_id and token come from the signal server’s relay-open. Resolves once the relay has paired this socket with the pilot’s, or fails.

Source

pub fn session_id(&self) -> u64

Source

pub fn kind(&self) -> SessionKind

Source

pub fn remote_addr(&self) -> Option<SocketAddr>

The pilot’s address for a direct session; None through the relay, where the only peer address is the cloud’s.

Source

pub fn max_datagram_size(&self) -> usize

Largest payload send_datagram currently accepts (path MTU minus QUIC and WebTransport framing). Changes as DPLPMTUD converges.

Source

pub fn send_buffer_space(&self) -> usize

Bytes the send buffer can take right now without dropping anything. Compare a whole frame’s size against this before sending its first chunk.

Source

pub fn send_buffer_queued(&self) -> usize

Payload bytes queued in the datagram send buffer and not yet packetised: the backlog that admission control measures against the QoS profile’s threshold. Everything counted here is latency the pilot has not seen yet.

quinn exposes only the free space (capacity minus queued payload, minus one bookkeeping constant), so this is the complement; the constant makes it read a few dozen bytes high, which is nothing against a frame.

Source

pub fn send_datagram(&self, payload: Bytes) -> Result<(), SendError>

Queue one datagram. Never blocks, never evicts queued datagrams.

Source

pub fn take_datagrams(&self) -> Option<Receiver<Bytes>>

Inbound datagrams (WebTransport prefix stripped). Can be taken once.

Source

pub async fn control(&self) -> Option<(ControlReader, ControlWriter)>

The first bidirectional stream the pilot opens — the control stream. Resolves once the pilot has opened it; None if the session ends first.

Source

pub fn stats(&self) -> PathStats

Source

pub fn close(&self, code: u32, reason: &str)

Source

pub async fn closed(&self)

Resolves when the connection is gone.

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
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

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

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

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.

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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.
§

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

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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