#[repr(C)]pub struct ExtensionFrame {
pub frame_type: u64,
pub tag: u64,
}
Expand description
QUIC frames do not use a self-describing encoding. An endpoint therefore needs to understand the syntax of all frames before it can successfully process a packet. This allows for efficient encoding of frames, but it means that an endpoint cannot send a frame of a type that is unknown to its peer.
An extension to QUIC that wishes to use a new type of frame MUST first ensure that a peer is able to understand the frame. An endpoint can use a transport parameter to signal its willingness to receive extension frame types. One transport parameter can indicate support for one or more extension frame types.
Extensions that modify or replace core protocol functionality (including frame types) will be difficult to combine with other extensions that modify or replace the same functionality unless the behavior of the combination is explicitly defined. Such extensions SHOULD define their interaction with previously-defined extensions modifying the same protocol components.
Extension frames MUST be congestion controlled and MUST cause an ACK frame to be sent. The exception is extension frames that replace or supplement the ACK frame. Extension frames are not included in flow control unless specified in the extension.
An IANA registry is used to manage the assignment of frame types
Fields§
§frame_type: u64
The corresponding frame type of the extension frame.
tag: u64
The content of the frame is opaque to the host implementation. All the frame-specific fields are maintained by the plugin itself. The tag enables the plugin to retrieve such information.
Trait Implementations§
Source§impl Clone for ExtensionFrame
impl Clone for ExtensionFrame
Source§fn clone(&self) -> ExtensionFrame
fn clone(&self) -> ExtensionFrame
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for ExtensionFrame
impl Debug for ExtensionFrame
Source§impl<'de> Deserialize<'de> for ExtensionFrame
impl<'de> Deserialize<'de> for ExtensionFrame
Source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<ExtensionFrame, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<ExtensionFrame, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
Source§impl PartialEq for ExtensionFrame
impl PartialEq for ExtensionFrame
Source§impl PartialOrd for ExtensionFrame
impl PartialOrd for ExtensionFrame
Source§impl Serialize for ExtensionFrame
impl Serialize for ExtensionFrame
Source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
impl Copy for ExtensionFrame
impl Eq for ExtensionFrame
impl StructuralPartialEq for ExtensionFrame
Auto Trait Implementations§
impl Freeze for ExtensionFrame
impl RefUnwindSafe for ExtensionFrame
impl Send for ExtensionFrame
impl Sync for ExtensionFrame
impl Unpin for ExtensionFrame
impl UnwindSafe for ExtensionFrame
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out
indicating that a T
is niched.