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
impl Session
Sourcepub async fn relay(
id: u64,
url: &str,
session_id: &str,
token: &str,
send_buffer_capacity: usize,
) -> Result<Session>
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.
pub fn session_id(&self) -> u64
pub fn kind(&self) -> SessionKind
Sourcepub fn remote_addr(&self) -> Option<SocketAddr>
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.
Sourcepub fn max_datagram_size(&self) -> usize
pub fn max_datagram_size(&self) -> usize
Largest payload send_datagram currently accepts (path MTU minus QUIC
and WebTransport framing). Changes as DPLPMTUD converges.
Sourcepub fn send_buffer_space(&self) -> usize
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.
Sourcepub fn send_buffer_queued(&self) -> usize
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.
Sourcepub fn send_datagram(&self, payload: Bytes) -> Result<(), SendError>
pub fn send_datagram(&self, payload: Bytes) -> Result<(), SendError>
Queue one datagram. Never blocks, never evicts queued datagrams.
Sourcepub fn take_datagrams(&self) -> Option<Receiver<Bytes>>
pub fn take_datagrams(&self) -> Option<Receiver<Bytes>>
Inbound datagrams (WebTransport prefix stripped). Can be taken once.
Sourcepub async fn control(&self) -> Option<(ControlReader, ControlWriter)>
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.