Skip to main content

AddAddress

Struct AddAddress 

Source
pub struct AddAddress {
    pub sequence: u64,
    pub priority: u64,
    pub transport_type: TransportType,
    pub address: TransportAddr,
    pub capabilities: Option<CapabilityFlags>,
}
Expand description

ADD_ADDRESS frame for advertising candidate addresses

As defined in draft-seemann-quic-nat-traversal-01, this frame includes:

  • Sequence number (VarInt)
  • Priority (VarInt)
  • Transport type (VarInt) - extension for multi-transport support
  • Address (transport-specific format)
  • Capability flags (VarInt, optional) - extension for capability advertisement

§Wire Format

Sequence (VarInt)
Priority (VarInt)
TransportType (VarInt): 0=UDP, 1=BLE, 2=LoRa, 3=Serial, etc.
AddressType (1 byte): depends on transport type
Address (variable): transport-specific address bytes
Port (2 bytes): for UDP addresses only
HasCapabilities (1 byte): 0=no, 1=yes
Capabilities (2 bytes): if HasCapabilities==1, CapabilityFlags bitfield

§Backward Compatibility

When decoding, if transport_type is not present (legacy frames), UDP is assumed. When encoding, transport_type 0 (UDP) uses the legacy format for compatibility. Capability flags are optional and default to None for backward compatibility.

Fields§

§sequence: u64

Sequence number for the address (used for referencing in other frames)

§priority: u64

Priority of this address candidate (higher values are preferred)

§transport_type: TransportType

Transport type for this address (UDP, BLE, LoRa, etc.)

§address: TransportAddr

The transport address being advertised

§capabilities: Option<CapabilityFlags>

Optional capability flags summarizing transport characteristics

Implementations§

Source§

impl AddAddress

Source

pub fn udp(sequence: u64, priority: u64, socket_addr: SocketAddr) -> Self

Create a new ADD_ADDRESS frame for a UDP address

This is the most common case and maintains backward compatibility. No capability flags are included by default.

Source

pub fn new(sequence: u64, priority: u64, address: TransportAddr) -> Self

Create a new ADD_ADDRESS frame for any transport address

No capability flags are included by default. Use with_capabilities() to add capability information.

Source

pub fn with_capabilities( sequence: u64, priority: u64, address: TransportAddr, capabilities: CapabilityFlags, ) -> Self

Create a new ADD_ADDRESS frame with capability flags

Source

pub fn from_capabilities( sequence: u64, priority: u64, address: TransportAddr, capabilities: &TransportCapabilities, ) -> Self

Create a new ADD_ADDRESS frame from a TransportAddr and TransportCapabilities

This automatically converts the full capabilities to compact CapabilityFlags.

Source

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

Get the socket address if this is a UDP transport

Returns None for non-UDP transports.

Source

pub fn has_capabilities(&self) -> bool

Check if this address has capability information

Source

pub fn capability_flags(&self) -> Option<CapabilityFlags>

Get the capability flags if present

Source

pub fn supports_full_quic(&self) -> Option<bool>

Check if this transport supports full QUIC (if capability info is available)

Source§

impl AddAddress

Source

pub fn encode_with_type<B: BufMut>(&self, buf: &mut B)

Encode this frame with its type prefix for transmission

Trait Implementations§

Source§

impl Clone for AddAddress

Source§

fn clone(&self) -> AddAddress

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 Codec for AddAddress

Source§

fn decode<B: Buf>(buf: &mut B) -> Result<Self>

Decode a Self from the provided buffer, if the buffer is large enough
Source§

fn encode<B: BufMut>(&self, buf: &mut B)

Append the encoding of self to the provided buffer
Source§

impl Debug for AddAddress

Source§

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

Formats the value using the given formatter. Read more
Source§

impl PartialEq for AddAddress

Source§

fn eq(&self, other: &AddAddress) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Eq for AddAddress

Source§

impl StructuralPartialEq for AddAddress

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
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<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
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> Same for T

Source§

type Output = T

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

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

Source§

fn vzip(self) -> V

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