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: u64Sequence number for the address (used for referencing in other frames)
priority: u64Priority of this address candidate (higher values are preferred)
transport_type: TransportTypeTransport type for this address (UDP, BLE, LoRa, etc.)
address: TransportAddrThe transport address being advertised
capabilities: Option<CapabilityFlags>Optional capability flags summarizing transport characteristics
Implementations§
Source§impl AddAddress
impl AddAddress
Sourcepub fn udp(sequence: u64, priority: u64, socket_addr: SocketAddr) -> Self
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.
Sourcepub fn new(sequence: u64, priority: u64, address: TransportAddr) -> Self
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.
Sourcepub fn with_capabilities(
sequence: u64,
priority: u64,
address: TransportAddr,
capabilities: CapabilityFlags,
) -> Self
pub fn with_capabilities( sequence: u64, priority: u64, address: TransportAddr, capabilities: CapabilityFlags, ) -> Self
Create a new ADD_ADDRESS frame with capability flags
Sourcepub fn from_capabilities(
sequence: u64,
priority: u64,
address: TransportAddr,
capabilities: &TransportCapabilities,
) -> Self
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.
Sourcepub fn socket_addr(&self) -> Option<SocketAddr>
pub fn socket_addr(&self) -> Option<SocketAddr>
Get the socket address if this is a UDP transport
Returns None for non-UDP transports.
Sourcepub fn has_capabilities(&self) -> bool
pub fn has_capabilities(&self) -> bool
Check if this address has capability information
Sourcepub fn capability_flags(&self) -> Option<CapabilityFlags>
pub fn capability_flags(&self) -> Option<CapabilityFlags>
Get the capability flags if present
Sourcepub fn supports_full_quic(&self) -> Option<bool>
pub fn supports_full_quic(&self) -> Option<bool>
Check if this transport supports full QUIC (if capability info is available)
Source§impl AddAddress
impl AddAddress
Sourcepub fn encode_with_type<B: BufMut>(&self, buf: &mut B)
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
impl Clone for AddAddress
Source§fn clone(&self) -> AddAddress
fn clone(&self) -> AddAddress
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Codec for AddAddress
impl Codec for AddAddress
Source§impl Debug for AddAddress
impl Debug for AddAddress
Source§impl PartialEq for AddAddress
impl PartialEq for AddAddress
Source§fn eq(&self, other: &AddAddress) -> bool
fn eq(&self, other: &AddAddress) -> bool
self and other values to be equal, and is used by ==.impl Eq for AddAddress
impl StructuralPartialEq for AddAddress
Auto Trait Implementations§
impl Freeze for AddAddress
impl RefUnwindSafe for AddAddress
impl Send for AddAddress
impl Sync for AddAddress
impl Unpin for AddAddress
impl UnsafeUnpin for AddAddress
impl UnwindSafe for AddAddress
Blanket Implementations§
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<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.