Skip to main content

Handshake

Struct Handshake 

Source
pub struct Handshake<S: Session> { /* private fields */ }
Expand description

A paused server-side handshake.

Returned by Server::accept_request once the peer’s advertised path is known but before the session is granted anything. Set the origins to serve, then call ok to complete the handshake, or close to reject it. Modeled on the WebTransport Request in moq-tokio.

Implementations§

Source§

impl<S> Handshake<S>
where S: Session,

Source

pub fn path(&self) -> &str

The request path the client advertised in its SETUP.

Empty when the client advertised none: either it sent an empty path, or the version carries none in-band (lite 01-04). Those mean the same thing, so the wire distinction isn’t surfaced. Populated for moq-lite-05 and newer, and every moq-transport draft we speak. See the note on Server::accept_request.

Source

pub fn role(&self) -> Option<Role>

The single Role the client advertised in its SETUP, or None for a bidirectional session.

Only moq-lite-05 and newer carry a role, so None covers three cases that the wire doesn’t distinguish: an older version, a client that omitted the parameter, and a client that explicitly advertised both directions. All three mean the same thing (the client may publish and subscribe), so authorize on what the token grants. See the note on Server::accept_request.

Source

pub fn peer_hop(&self) -> Option<Hop>

The Hop ID declared by the peer, when the negotiated protocol carries one.

A moq-lite-05+ endpoint declares this when it attaches a publish or subscribe origin; a moqt-17+ endpoint declares it via the MoQ Cluster extension. Older versions and endpoints without one return None.

Self-declared, so treat it as a correlation hint rather than an authenticated identity: authorize on the token or client certificate.

Source

pub fn with_publisher(self, publish: impl Consume<Consumer>) -> Self

Publish to the connected client. Overrides any value from the Server builder; typically set after inspecting path.

Source

pub fn with_subscriber(self, subscribe: Producer) -> Self

Subscribe to the connected client. Overrides any value from the Server builder.

Source

pub fn with_peer_hop(self, hop: Hop) -> Self

Assign the identity this peer’s routes are attributed to, overriding the fresh per-session default.

Only for a peer whose identity the server has actually established, such as one authenticated by mTLS or a token (crate::Client::with_peer_hop is the dialing-side equivalent). An identity the peer declares on the wire still wins.

Two sessions given the same origin are treated as one endpoint: routes learned from either are kept off both, and content arriving on either is interchangeable with the other’s. That is the point when they really are one peer reconnecting or running redundant links, and a bug otherwise. Derive it from the authenticated identity, never from something coarser like the remote address.

Source

pub fn with_stats(self, stats: Session) -> Self

Set the per-connection stats::Session context. Overrides any value from the Server builder.

Source

pub async fn ok(self) -> Result<(Session, Driver<S>), Error>

Accept the session, returning the Session and its Driver.

Poll or spawn the returned driver to run the session.

Source

pub fn close(self, err: Error)

Reject the session, closing the transport with err’s wire code.

Trait Implementations§

Source§

impl<S: Session> Drop for Handshake<S>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. Read more

Auto Trait Implementations§

§

impl<S> !RefUnwindSafe for Handshake<S>

§

impl<S> !UnwindSafe for Handshake<S>

§

impl<S> Freeze for Handshake<S>
where Option<RequestInner<S>>: Freeze,

§

impl<S> Send for Handshake<S>
where Option<RequestInner<S>>: Send,

§

impl<S> Sync for Handshake<S>
where Option<RequestInner<S>>: Sync,

§

impl<S> Unpin for Handshake<S>
where Option<RequestInner<S>>: Unpin,

§

impl<S> UnsafeUnpin for Handshake<S>
where Option<RequestInner<S>>: UnsafeUnpin,

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> MaybeSend for T
where T: Send,

Source§

impl<T> MaybeSend for T
where T: Send + ?Sized,

Source§

impl<T> MaybeSend for T
where T: Send,

Source§

impl<T> MaybeSync for T
where T: Sync,

Source§

impl<T> MaybeSync for T
where T: Sync,

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

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