Skip to main content

FrameCtx

Struct FrameCtx 

Source
#[non_exhaustive]
pub struct FrameCtx<'a> { pub session_id: SessionId, pub side: ProxySide, pub draft: DraftVersion, pub stream_id: Option<u64>, pub arrived_at: Instant, pub caps: &'a Capabilities, }
Expand description

Context for a control message or datagram decision.

Fields (Non-exhaustive)§

This struct is marked as non-exhaustive
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.
§session_id: SessionId

The session identifier.

§side: ProxySide

The side the unit arrived on.

§draft: DraftVersion

The draft this unit was parsed under.

A session’s draft is not necessarily the one it was configured with. The ALPN names a draft outright from draft-15 on, and such a session is settled before it dials, so this never moves. Drafts 07 to 14 share the one ALPN moq-00: a session in that cohort starts on the draft its configuration named and the control stream refines it from the first SETUP it can read — CLIENT_SETUP’s highest offered version, which SERVER_SETUP’s selected version then outranks, because the second is what the peers agreed and the first is only what one of them proposed.

Both sites this context is built for see the refined answer rather than the starting draft, by two different mechanisms. ProxyHook::on_datagram’s forwarding task waits for the control stream to answer before it reads its first datagram. ProxyHook::on_control_message needs no wait: a session that declared Interest::CONTROL withholds the control stream’s bytes until the leading SETUP has been peeked at, so even the frame that named the draft is reported under it.

Two cases end the wait with the starting draft instead, and both are sessions no draft describes: a peer that sends no SETUP at all, and a peer whose first control message is something else. A SETUP arriving after either still refines what comes after it.

§stream_id: Option<u64>

The stream this frame belongs to. None for datagrams.

§arrived_at: Instant

When the proxy produced this unit for decision.

§caps: &'a Capabilities

What is executable on this draft at this site.

Implementations§

Source§

impl<'a> FrameCtx<'a>

Source

pub fn new( session_id: SessionId, side: ProxySide, draft: DraftVersion, stream_id: Option<u64>, arrived_at: Instant, caps: &'a Capabilities, ) -> Self

Build a context. Field order matches the struct.

stream_id is None for datagrams.

Trait Implementations§

Source§

impl<'a> Clone for FrameCtx<'a>

Source§

fn clone(&self) -> FrameCtx<'a>

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<'a> Copy for FrameCtx<'a>

Source§

impl<'a> Debug for FrameCtx<'a>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<'a> Freeze for FrameCtx<'a>

§

impl<'a> RefUnwindSafe for FrameCtx<'a>

§

impl<'a> Send for FrameCtx<'a>

§

impl<'a> Sync for FrameCtx<'a>

§

impl<'a> Unpin for FrameCtx<'a>

§

impl<'a> UnsafeUnpin for FrameCtx<'a>

§

impl<'a> UnwindSafe for FrameCtx<'a>

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

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