From cfa1991f9e7cdc49530ff60e0378a7f421c615af Mon Sep 17 00:00:00 2001 From: rklaehn Date: Thu, 26 Mar 2026 13:12:30 +0000 Subject: [PATCH] deploy: 2f7a0e743c99d0ccef5d6e6224df71fd99517b78 --- pr/547/docs/bench/fn.connect_client.html | 2 +- pr/547/docs/bench/fn.drain_stream.html | 2 +- pr/547/docs/bench/fn.send_data_on_stream.html | 2 +- pr/547/docs/bench/fn.server_endpoint.html | 2 +- pr/547/docs/bench/fn.transport_config.html | 2 +- pr/547/docs/help.html | 2 +- pr/547/docs/noq/congestion/index.html | 2 +- pr/547/docs/noq/congestion/struct.Bbr.html | 14 +- .../docs/noq/congestion/struct.BbrConfig.html | 8 +- .../congestion/struct.ControllerMetrics.html | 4 +- pr/547/docs/noq/congestion/struct.Cubic.html | 14 +- .../noq/congestion/struct.CubicConfig.html | 8 +- .../docs/noq/congestion/struct.NewReno.html | 14 +- .../noq/congestion/struct.NewRenoConfig.html | 10 +- .../docs/noq/congestion/trait.Controller.html | 30 +-- .../congestion/trait.ControllerFactory.html | 6 +- pr/547/docs/noq/crypto/index.html | 2 +- pr/547/docs/noq/crypto/rustls/index.html | 2 +- .../crypto/rustls/struct.HandshakeData.html | 2 +- .../rustls/struct.NoInitialCipherSuite.html | 4 +- .../rustls/struct.QuicClientConfig.html | 14 +- .../rustls/struct.QuicServerConfig.html | 18 +- .../noq/crypto/rustls/struct.TlsSession.html | 8 +- .../docs/noq/crypto/struct.CryptoError.html | 4 +- .../struct.ExportKeyingMaterialError.html | 6 +- pr/547/docs/noq/crypto/struct.KeyPair.html | 2 +- pr/547/docs/noq/crypto/struct.Keys.html | 2 +- .../noq/crypto/struct.UnsupportedVersion.html | 4 +- .../docs/noq/crypto/trait.ClientConfig.html | 10 +- .../noq/crypto/trait.HandshakeTokenKey.html | 6 +- pr/547/docs/noq/crypto/trait.HeaderKey.html | 10 +- pr/547/docs/noq/crypto/trait.HmacKey.html | 10 +- pr/547/docs/noq/crypto/trait.PacketKey.html | 18 +- .../docs/noq/crypto/trait.ServerConfig.html | 14 +- pr/547/docs/noq/crypto/trait.Session.html | 32 +-- pr/547/docs/noq/enum.ConfigError.html | 6 +- pr/547/docs/noq/enum.ConnectError.html | 6 +- pr/547/docs/noq/enum.ConnectionError.html | 10 +- pr/547/docs/noq/enum.Dir.html | 16 +- pr/547/docs/noq/enum.EcnCodepoint.html | 10 +- pr/547/docs/noq/enum.FrameType.html | 14 +- pr/547/docs/noq/enum.Side.html | 20 +- pr/547/docs/noq/index.html | 3 +- .../docs/noq/struct.AckFrequencyConfig.html | 10 +- pr/547/docs/noq/struct.ApplicationClose.html | 6 +- pr/547/docs/noq/struct.BloomTokenLog.html | 10 +- pr/547/docs/noq/struct.Chunk.html | 6 +- pr/547/docs/noq/struct.ClientConfig.html | 18 +- pr/547/docs/noq/struct.ClosedStream.html | 6 +- pr/547/docs/noq/struct.Connection.html | 22 +- pr/547/docs/noq/struct.ConnectionClose.html | 10 +- pr/547/docs/noq/struct.ConnectionId.html | 16 +- pr/547/docs/noq/struct.ConnectionStats.html | 4 +- pr/547/docs/noq/struct.EndpointConfig.html | 24 +- pr/547/docs/noq/struct.FrameStats.html | 6 +- pr/547/docs/noq/struct.IdleTimeout.html | 14 +- pr/547/docs/noq/struct.Incoming.html | 2 +- pr/547/docs/noq/struct.InvalidCid.html | 4 +- pr/547/docs/noq/struct.Lagged.html | 9 +- .../docs/noq/struct.MtuDiscoveryConfig.html | 12 +- .../docs/noq/struct.NatTraversalUpdates.html | 4 +- pr/547/docs/noq/struct.NoneTokenLog.html | 4 +- pr/547/docs/noq/struct.NoneTokenStore.html | 4 +- .../docs/noq/struct.ObservedExternalAddr.html | 6 +- pr/547/docs/noq/struct.OpenPath.html | 2 +- pr/547/docs/noq/struct.Path.html | 18 +- pr/547/docs/noq/struct.PathEvents.html | 4 +- pr/547/docs/noq/struct.PathId.html | 26 +-- pr/547/docs/noq/struct.PathStats.html | 6 +- pr/547/docs/noq/struct.QlogConfig.html | 10 +- pr/547/docs/noq/struct.QlogFileFactory.html | 12 +- pr/547/docs/noq/struct.ServerConfig.html | 44 ++-- pr/547/docs/noq/struct.StdSystemTime.html | 4 +- pr/547/docs/noq/struct.StreamId.html | 26 +-- pr/547/docs/noq/struct.TokenMemoryCache.html | 8 +- pr/547/docs/noq/struct.TokenReuseError.html | 2 +- pr/547/docs/noq/struct.Transmit.html | 4 +- pr/547/docs/noq/struct.TransportConfig.html | 72 +++--- .../docs/noq/struct.TransportErrorCode.html | 54 ++--- pr/547/docs/noq/struct.UdpStats.html | 6 +- .../noq/struct.ValidationTokenConfig.html | 10 +- pr/547/docs/noq/struct.VarInt.html | 38 +-- .../docs/noq/struct.VarIntBoundsExceeded.html | 6 +- pr/547/docs/noq/struct.Written.html | 6 +- .../docs/noq/trait.ConnectionIdGenerator.html | 12 +- pr/547/docs/noq/trait.NetworkChangeHint.html | 6 +- pr/547/docs/noq/trait.QlogFactory.html | 6 +- pr/547/docs/noq/trait.TimeSource.html | 6 +- pr/547/docs/noq/trait.TokenLog.html | 6 +- pr/547/docs/noq/trait.TokenStore.html | 8 +- pr/547/docs/search.index/desc/4b7cf45f488d.js | 1 - pr/547/docs/search.index/desc/71b9fd100c6a.js | 1 + pr/547/docs/search.index/root.js | 2 +- pr/547/docs/settings.html | 2 +- pr/547/docs/src/noq/event_stream.rs.html | 216 +++++++++--------- 95 files changed, 599 insertions(+), 597 deletions(-) delete mode 100644 pr/547/docs/search.index/desc/4b7cf45f488d.js create mode 100644 pr/547/docs/search.index/desc/71b9fd100c6a.js diff --git a/pr/547/docs/bench/fn.connect_client.html b/pr/547/docs/bench/fn.connect_client.html index db1c46780..1f4edbfc9 100644 --- a/pr/547/docs/bench/fn.connect_client.html +++ b/pr/547/docs/bench/fn.connect_client.html @@ -2,5 +2,5 @@ server_addr: SocketAddr, server_cert: CertificateDer<'_>, opt: Opt, -) -> Result<(Endpoint, Connection)>
Expand description

Create a client endpoint and client connection

+) -> Result<(Endpoint, Connection)>
Expand description

Create a client endpoint and client connection

\ No newline at end of file diff --git a/pr/547/docs/bench/fn.drain_stream.html b/pr/547/docs/bench/fn.drain_stream.html index 419a7887d..1156135bd 100644 --- a/pr/547/docs/bench/fn.drain_stream.html +++ b/pr/547/docs/bench/fn.drain_stream.html @@ -1,4 +1,4 @@ drain_stream in bench - Rust

drain_stream

Function drain_stream 

Source
pub async fn drain_stream(
-    stream: RecvStream,
+    stream: RecvStream,
     read_unordered: bool,
 ) -> Result<usize>
\ No newline at end of file diff --git a/pr/547/docs/bench/fn.send_data_on_stream.html b/pr/547/docs/bench/fn.send_data_on_stream.html index e0ee604a7..dbdfc4d28 100644 --- a/pr/547/docs/bench/fn.send_data_on_stream.html +++ b/pr/547/docs/bench/fn.send_data_on_stream.html @@ -1,4 +1,4 @@ send_data_on_stream in bench - Rust

send_data_on_stream

Function send_data_on_stream 

Source
pub async fn send_data_on_stream(
-    stream: &mut SendStream,
+    stream: &mut SendStream,
     stream_size: u64,
 ) -> Result<()>
\ No newline at end of file diff --git a/pr/547/docs/bench/fn.server_endpoint.html b/pr/547/docs/bench/fn.server_endpoint.html index f1d25c09c..2b7bac5c1 100644 --- a/pr/547/docs/bench/fn.server_endpoint.html +++ b/pr/547/docs/bench/fn.server_endpoint.html @@ -3,5 +3,5 @@ cert: CertificateDer<'static>, key: PrivateKeyDer<'static>, opt: &Opt, -) -> (SocketAddr, Endpoint)
Expand description

Creates a server endpoint which runs on the given runtime

+) -> (SocketAddr, Endpoint)
Expand description

Creates a server endpoint which runs on the given runtime

\ No newline at end of file diff --git a/pr/547/docs/bench/fn.transport_config.html b/pr/547/docs/bench/fn.transport_config.html index 5d443f5a8..3bbf46783 100644 --- a/pr/547/docs/bench/fn.transport_config.html +++ b/pr/547/docs/bench/fn.transport_config.html @@ -1 +1 @@ -transport_config in bench - Rust

transport_config

Function transport_config 

Source
pub fn transport_config(opt: &Opt) -> TransportConfig
\ No newline at end of file +transport_config in bench - Rust

transport_config

Function transport_config 

Source
pub fn transport_config(opt: &Opt) -> TransportConfig
\ No newline at end of file diff --git a/pr/547/docs/help.html b/pr/547/docs/help.html index 99d8cb979..09d0ca8e7 100644 --- a/pr/547/docs/help.html +++ b/pr/547/docs/help.html @@ -1 +1 @@ -Help

All

Rustdoc help

Back
\ No newline at end of file +Help

All

Rustdoc help

Back
\ No newline at end of file diff --git a/pr/547/docs/noq/congestion/index.html b/pr/547/docs/noq/congestion/index.html index 7a948be8d..bfd676f25 100644 --- a/pr/547/docs/noq/congestion/index.html +++ b/pr/547/docs/noq/congestion/index.html @@ -1,2 +1,2 @@ -noq::congestion - Rust

Module congestion

Module congestion 

Expand description

Logic for controlling the rate at which data is sent

+noq::congestion - Rust

Module congestion

Module congestion 

Source
Expand description

Logic for controlling the rate at which data is sent

Structs§

Bbr
Experimental! Use at your own risk.
BbrConfig
Configuration for the Bbr congestion controller
ControllerMetrics
Common congestion controller metrics
Cubic
The RFC8312 congestion controller, as widely used for TCP
CubicConfig
Configuration for the Cubic congestion controller
NewReno
A simple, standard congestion controller
NewRenoConfig
Configuration for the NewReno congestion controller

Traits§

Controller
Common interface for different congestion controllers
ControllerFactory
Constructs controllers on demand
\ No newline at end of file diff --git a/pr/547/docs/noq/congestion/struct.Bbr.html b/pr/547/docs/noq/congestion/struct.Bbr.html index db52082ef..9e92b09c0 100644 --- a/pr/547/docs/noq/congestion/struct.Bbr.html +++ b/pr/547/docs/noq/congestion/struct.Bbr.html @@ -1,30 +1,30 @@ -Bbr in noq::congestion - Rust

Bbr

Struct Bbr 

pub struct Bbr { /* private fields */ }
Expand description

Experimental! Use at your own risk.

+Bbr in noq::congestion - Rust

Bbr

Struct Bbr 

Source
pub struct Bbr { /* private fields */ }
Expand description

Experimental! Use at your own risk.

Aims for reduced buffer bloat and improved performance over high bandwidth-delay product networks. Based on google’s quiche implementation https://source.chromium.org/chromium/chromium/src/+/master:net/third_party/quiche/src/quic/core/congestion_control/bbr_sender.cc of BBR https://datatracker.ietf.org/doc/html/draft-cardwell-iccrg-bbr-congestion-control. More discussion and links at https://groups.google.com/g/bbr-dev.

-

Implementations§

§

impl Bbr

pub fn new(config: Arc<BbrConfig>, current_mtu: u16) -> Bbr

Construct a state using the given config and current time now

-

Trait Implementations§

§

impl Clone for Bbr

§

fn clone(&self) -> Bbr

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
§

impl Controller for Bbr

§

fn on_sent(&mut self, now: Instant, bytes: u64, last_packet_number: u64)

One or more packets were just sent
§

fn on_ack( +

Implementations§

Source§

impl Bbr

Source

pub fn new(config: Arc<BbrConfig>, current_mtu: u16) -> Bbr

Construct a state using the given config and current time now

+

Trait Implementations§

Source§

impl Clone for Bbr

Source§

fn clone(&self) -> Bbr

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Controller for Bbr

Source§

fn on_sent(&mut self, now: Instant, bytes: u64, last_packet_number: u64)

One or more packets were just sent
Source§

fn on_ack( &mut self, now: Instant, sent: Instant, bytes: u64, app_limited: bool, - rtt: &RttEstimator, -)

Packet deliveries were confirmed Read more
§

fn on_end_acks( + rtt: &RttEstimator, +)

Packet deliveries were confirmed Read more
Source§

fn on_end_acks( &mut self, now: Instant, in_flight: u64, app_limited: bool, largest_packet_num_acked: Option<u64>, -)

Packets are acked in batches, all with the same now argument. This indicates one of those batches has completed.
§

fn on_congestion_event( +)

Packets are acked in batches, all with the same now argument. This indicates one of those batches has completed.
Source§

fn on_congestion_event( &mut self, _now: Instant, _sent: Instant, _is_persistent_congestion: bool, _is_ecn: bool, lost_bytes: u64, -)

Packets were deemed lost or marked congested Read more
§

fn on_mtu_update(&mut self, new_mtu: u16)

The known MTU for the current network path has been updated
§

fn window(&self) -> u64

Number of ack-eliciting bytes that may be in flight
§

fn metrics(&self) -> ControllerMetrics

Retrieve implementation-specific metrics used to populate qlog traces when they are enabled
§

fn clone_box(&self) -> Box<dyn Controller>

Duplicate the controller’s state
§

fn initial_window(&self) -> u64

Initial congestion window
§

fn into_any(self: Box<Bbr>) -> Box<dyn Any>

Returns Self for use in down-casting to extract implementation details
§

fn on_spurious_congestion_event(&mut self)

Packets were incorrectly deemed lost Read more
§

impl Debug for Bbr

§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Bbr

§

impl RefUnwindSafe for Bbr

§

impl Send for Bbr

§

impl Sync for Bbr

§

impl Unpin for Bbr

§

impl UnwindSafe for Bbr

Blanket Implementations§

Source§

impl<T> Any for T
where +)

Packets were deemed lost or marked congested Read more
Source§

fn on_mtu_update(&mut self, new_mtu: u16)

The known MTU for the current network path has been updated
Source§

fn window(&self) -> u64

Number of ack-eliciting bytes that may be in flight
Source§

fn metrics(&self) -> ControllerMetrics

Retrieve implementation-specific metrics used to populate qlog traces when they are enabled
Source§

fn clone_box(&self) -> Box<dyn Controller>

Duplicate the controller’s state
Source§

fn initial_window(&self) -> u64

Initial congestion window
Source§

fn into_any(self: Box<Bbr>) -> Box<dyn Any>

Returns Self for use in down-casting to extract implementation details
Source§

fn on_spurious_congestion_event(&mut self)

Packets were incorrectly deemed lost Read more
Source§

impl Debug for Bbr

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Bbr

§

impl RefUnwindSafe for Bbr

§

impl Send for Bbr

§

impl Sync for Bbr

§

impl Unpin for Bbr

§

impl UnwindSafe for Bbr

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 diff --git a/pr/547/docs/noq/congestion/struct.BbrConfig.html b/pr/547/docs/noq/congestion/struct.BbrConfig.html index f02aefcc7..1cbda7adb 100644 --- a/pr/547/docs/noq/congestion/struct.BbrConfig.html +++ b/pr/547/docs/noq/congestion/struct.BbrConfig.html @@ -1,11 +1,11 @@ -BbrConfig in noq::congestion - Rust

BbrConfig

Struct BbrConfig 

pub struct BbrConfig { /* private fields */ }
Expand description

Configuration for the Bbr congestion controller

-

Implementations§

§

impl BbrConfig

pub fn initial_window(&mut self, value: u64) -> &mut BbrConfig

Default limit on the amount of outstanding data in bytes.

+BbrConfig in noq::congestion - Rust

BbrConfig

Struct BbrConfig 

Source
pub struct BbrConfig { /* private fields */ }
Expand description

Configuration for the Bbr congestion controller

+

Implementations§

Source§

impl BbrConfig

Source

pub fn initial_window(&mut self, value: u64) -> &mut BbrConfig

Default limit on the amount of outstanding data in bytes.

Recommended value: min(10 * max_datagram_size, max(2 * max_datagram_size, 14720))

-

Trait Implementations§

§

impl Clone for BbrConfig

§

fn clone(&self) -> BbrConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
§

impl ControllerFactory for BbrConfig

§

fn build( +

Trait Implementations§

Source§

impl Clone for BbrConfig

Source§

fn clone(&self) -> BbrConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl ControllerFactory for BbrConfig

Source§

fn build( self: Arc<BbrConfig>, _now: Instant, current_mtu: u16, -) -> Box<dyn Controller>

Construct a fresh Controller
§

impl Debug for BbrConfig

§

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

Formats the value using the given formatter. Read more
§

impl Default for BbrConfig

§

fn default() -> BbrConfig

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +) -> Box<dyn Controller>

Construct a fresh Controller
Source§

impl Debug for BbrConfig

Source§

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

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

impl Default for BbrConfig

Source§

fn default() -> BbrConfig

Returns the “default value” for a type. Read more

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 diff --git a/pr/547/docs/noq/congestion/struct.ControllerMetrics.html b/pr/547/docs/noq/congestion/struct.ControllerMetrics.html index e2c4d4b9d..83727dbb4 100644 --- a/pr/547/docs/noq/congestion/struct.ControllerMetrics.html +++ b/pr/547/docs/noq/congestion/struct.ControllerMetrics.html @@ -1,4 +1,4 @@ -ControllerMetrics in noq::congestion - Rust

ControllerMetrics

Struct ControllerMetrics 

#[non_exhaustive]
pub struct ControllerMetrics { +ControllerMetrics in noq::congestion - Rust

ControllerMetrics

Struct ControllerMetrics 

Source
#[non_exhaustive]
pub struct ControllerMetrics { pub congestion_window: u64, pub ssthresh: Option<u64>, pub pacing_rate: Option<u64>, @@ -6,7 +6,7 @@

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.
§congestion_window: u64

Congestion window (bytes)

§ssthresh: Option<u64>

Slow start threshold (bytes)

§pacing_rate: Option<u64>

Pacing rate (bits/s)

-

Trait Implementations§

§

impl Debug for ControllerMetrics

§

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

Formats the value using the given formatter. Read more
§

impl Default for ControllerMetrics

§

fn default() -> ControllerMetrics

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +

Trait Implementations§

Source§

impl Debug for ControllerMetrics

Source§

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

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

impl Default for ControllerMetrics

Source§

fn default() -> ControllerMetrics

Returns the “default value” for a type. Read more

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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

diff --git a/pr/547/docs/noq/congestion/struct.Cubic.html b/pr/547/docs/noq/congestion/struct.Cubic.html index 1480d6b4a..cbf414f0d 100644 --- a/pr/547/docs/noq/congestion/struct.Cubic.html +++ b/pr/547/docs/noq/congestion/struct.Cubic.html @@ -1,26 +1,26 @@ -Cubic in noq::congestion - Rust

Cubic

Struct Cubic 

pub struct Cubic { /* private fields */ }
Expand description

The RFC8312 congestion controller, as widely used for TCP

-

Implementations§

§

impl Cubic

pub fn new(config: Arc<CubicConfig>, _now: Instant, current_mtu: u16) -> Cubic

Construct a state using the given config and current time now

-

Trait Implementations§

§

impl Clone for Cubic

§

fn clone(&self) -> Cubic

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
§

impl Controller for Cubic

§

fn on_ack( +Cubic in noq::congestion - Rust

Cubic

Struct Cubic 

Source
pub struct Cubic { /* private fields */ }
Expand description

The RFC8312 congestion controller, as widely used for TCP

+

Implementations§

Source§

impl Cubic

Source

pub fn new(config: Arc<CubicConfig>, _now: Instant, current_mtu: u16) -> Cubic

Construct a state using the given config and current time now

+

Trait Implementations§

Source§

impl Clone for Cubic

Source§

fn clone(&self) -> Cubic

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Controller for Cubic

Source§

fn on_ack( &mut self, now: Instant, sent: Instant, bytes: u64, app_limited: bool, - rtt: &RttEstimator, -)

Packet deliveries were confirmed Read more
§

fn on_congestion_event( + rtt: &RttEstimator, +)

Packet deliveries were confirmed Read more
Source§

fn on_congestion_event( &mut self, now: Instant, sent: Instant, is_persistent_congestion: bool, is_ecn: bool, _lost_bytes: u64, -)

Packets were deemed lost or marked congested Read more
§

fn on_spurious_congestion_event(&mut self)

Packets were incorrectly deemed lost Read more
§

fn on_mtu_update(&mut self, new_mtu: u16)

The known MTU for the current network path has been updated
§

fn window(&self) -> u64

Number of ack-eliciting bytes that may be in flight
§

fn metrics(&self) -> ControllerMetrics

Retrieve implementation-specific metrics used to populate qlog traces when they are enabled
§

fn clone_box(&self) -> Box<dyn Controller>

Duplicate the controller’s state
§

fn initial_window(&self) -> u64

Initial congestion window
§

fn into_any(self: Box<Cubic>) -> Box<dyn Any>

Returns Self for use in down-casting to extract implementation details
§

fn on_sent(&mut self, now: Instant, bytes: u64, last_packet_number: u64)

One or more packets were just sent
§

fn on_end_acks( +)

Packets were deemed lost or marked congested Read more
Source§

fn on_spurious_congestion_event(&mut self)

Packets were incorrectly deemed lost Read more
Source§

fn on_mtu_update(&mut self, new_mtu: u16)

The known MTU for the current network path has been updated
Source§

fn window(&self) -> u64

Number of ack-eliciting bytes that may be in flight
Source§

fn metrics(&self) -> ControllerMetrics

Retrieve implementation-specific metrics used to populate qlog traces when they are enabled
Source§

fn clone_box(&self) -> Box<dyn Controller>

Duplicate the controller’s state
Source§

fn initial_window(&self) -> u64

Initial congestion window
Source§

fn into_any(self: Box<Cubic>) -> Box<dyn Any>

Returns Self for use in down-casting to extract implementation details
Source§

fn on_sent(&mut self, now: Instant, bytes: u64, last_packet_number: u64)

One or more packets were just sent
Source§

fn on_end_acks( &mut self, now: Instant, in_flight: u64, app_limited: bool, largest_packet_num_acked: Option<u64>, -)

Packets are acked in batches, all with the same now argument. This indicates one of those batches has completed.
§

impl Debug for Cubic

§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Cubic

§

impl RefUnwindSafe for Cubic

§

impl Send for Cubic

§

impl Sync for Cubic

§

impl Unpin for Cubic

§

impl UnwindSafe for Cubic

Blanket Implementations§

Source§

impl<T> Any for T
where +)

Packets are acked in batches, all with the same now argument. This indicates one of those batches has completed.

Source§

impl Debug for Cubic

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Cubic

§

impl RefUnwindSafe for Cubic

§

impl Send for Cubic

§

impl Sync for Cubic

§

impl Unpin for Cubic

§

impl UnwindSafe for Cubic

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 diff --git a/pr/547/docs/noq/congestion/struct.CubicConfig.html b/pr/547/docs/noq/congestion/struct.CubicConfig.html index 8164541f8..30dd7d958 100644 --- a/pr/547/docs/noq/congestion/struct.CubicConfig.html +++ b/pr/547/docs/noq/congestion/struct.CubicConfig.html @@ -1,11 +1,11 @@ -CubicConfig in noq::congestion - Rust

CubicConfig

Struct CubicConfig 

pub struct CubicConfig { /* private fields */ }
Expand description

Configuration for the Cubic congestion controller

-

Implementations§

§

impl CubicConfig

pub fn initial_window(&mut self, value: u64) -> &mut CubicConfig

Default limit on the amount of outstanding data in bytes.

+CubicConfig in noq::congestion - Rust

CubicConfig

Struct CubicConfig 

Source
pub struct CubicConfig { /* private fields */ }
Expand description

Configuration for the Cubic congestion controller

+

Implementations§

Source§

impl CubicConfig

Source

pub fn initial_window(&mut self, value: u64) -> &mut CubicConfig

Default limit on the amount of outstanding data in bytes.

Recommended value: min(10 * max_datagram_size, max(2 * max_datagram_size, 14720))

-

Trait Implementations§

§

impl Clone for CubicConfig

§

fn clone(&self) -> CubicConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
§

impl ControllerFactory for CubicConfig

§

fn build( +

Trait Implementations§

Source§

impl Clone for CubicConfig

Source§

fn clone(&self) -> CubicConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl ControllerFactory for CubicConfig

Source§

fn build( self: Arc<CubicConfig>, now: Instant, current_mtu: u16, -) -> Box<dyn Controller>

Construct a fresh Controller
§

impl Debug for CubicConfig

§

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

Formats the value using the given formatter. Read more
§

impl Default for CubicConfig

§

fn default() -> CubicConfig

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +) -> Box<dyn Controller>

Construct a fresh Controller
Source§

impl Debug for CubicConfig

Source§

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

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

impl Default for CubicConfig

Source§

fn default() -> CubicConfig

Returns the “default value” for a type. Read more

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 diff --git a/pr/547/docs/noq/congestion/struct.NewReno.html b/pr/547/docs/noq/congestion/struct.NewReno.html index 4a24a3366..db55ce790 100644 --- a/pr/547/docs/noq/congestion/struct.NewReno.html +++ b/pr/547/docs/noq/congestion/struct.NewReno.html @@ -1,30 +1,30 @@ -NewReno in noq::congestion - Rust

NewReno

Struct NewReno 

pub struct NewReno { /* private fields */ }
Expand description

A simple, standard congestion controller

-

Implementations§

§

impl NewReno

pub fn new( +NewReno in noq::congestion - Rust

NewReno

Struct NewReno 

Source
pub struct NewReno { /* private fields */ }
Expand description

A simple, standard congestion controller

+

Implementations§

Source§

impl NewReno

Source

pub fn new( config: Arc<NewRenoConfig>, now: Instant, current_mtu: u16, ) -> NewReno

Construct a state using the given config and current time now

-

Trait Implementations§

§

impl Clone for NewReno

§

fn clone(&self) -> NewReno

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
§

impl Controller for NewReno

§

fn on_ack( +

Trait Implementations§

Source§

impl Clone for NewReno

Source§

fn clone(&self) -> NewReno

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Controller for NewReno

Source§

fn on_ack( &mut self, _now: Instant, sent: Instant, bytes: u64, app_limited: bool, - _rtt: &RttEstimator, -)

Packet deliveries were confirmed Read more
§

fn on_congestion_event( + _rtt: &RttEstimator, +)

Packet deliveries were confirmed Read more
Source§

fn on_congestion_event( &mut self, now: Instant, sent: Instant, is_persistent_congestion: bool, _is_ecn: bool, _lost_bytes: u64, -)

Packets were deemed lost or marked congested Read more
§

fn on_mtu_update(&mut self, new_mtu: u16)

The known MTU for the current network path has been updated
§

fn window(&self) -> u64

Number of ack-eliciting bytes that may be in flight
§

fn metrics(&self) -> ControllerMetrics

Retrieve implementation-specific metrics used to populate qlog traces when they are enabled
§

fn clone_box(&self) -> Box<dyn Controller>

Duplicate the controller’s state
§

fn initial_window(&self) -> u64

Initial congestion window
§

fn into_any(self: Box<NewReno>) -> Box<dyn Any>

Returns Self for use in down-casting to extract implementation details
§

fn on_sent(&mut self, now: Instant, bytes: u64, last_packet_number: u64)

One or more packets were just sent
§

fn on_end_acks( +)

Packets were deemed lost or marked congested Read more
Source§

fn on_mtu_update(&mut self, new_mtu: u16)

The known MTU for the current network path has been updated
Source§

fn window(&self) -> u64

Number of ack-eliciting bytes that may be in flight
Source§

fn metrics(&self) -> ControllerMetrics

Retrieve implementation-specific metrics used to populate qlog traces when they are enabled
Source§

fn clone_box(&self) -> Box<dyn Controller>

Duplicate the controller’s state
Source§

fn initial_window(&self) -> u64

Initial congestion window
Source§

fn into_any(self: Box<NewReno>) -> Box<dyn Any>

Returns Self for use in down-casting to extract implementation details
Source§

fn on_sent(&mut self, now: Instant, bytes: u64, last_packet_number: u64)

One or more packets were just sent
Source§

fn on_end_acks( &mut self, now: Instant, in_flight: u64, app_limited: bool, largest_packet_num_acked: Option<u64>, -)

Packets are acked in batches, all with the same now argument. This indicates one of those batches has completed.
§

fn on_spurious_congestion_event(&mut self)

Packets were incorrectly deemed lost Read more
§

impl Debug for NewReno

§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +)

Packets are acked in batches, all with the same now argument. This indicates one of those batches has completed.
Source§

fn on_spurious_congestion_event(&mut self)

Packets were incorrectly deemed lost Read more
Source§

impl Debug for NewReno

Source§

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

Formats the value using the given formatter. Read more

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 diff --git a/pr/547/docs/noq/congestion/struct.NewRenoConfig.html b/pr/547/docs/noq/congestion/struct.NewRenoConfig.html index 4fba8cb97..45bf5627e 100644 --- a/pr/547/docs/noq/congestion/struct.NewRenoConfig.html +++ b/pr/547/docs/noq/congestion/struct.NewRenoConfig.html @@ -1,12 +1,12 @@ -NewRenoConfig in noq::congestion - Rust

NewRenoConfig

Struct NewRenoConfig 

pub struct NewRenoConfig { /* private fields */ }
Expand description

Configuration for the NewReno congestion controller

-

Implementations§

§

impl NewRenoConfig

pub fn initial_window(&mut self, value: u64) -> &mut NewRenoConfig

Default limit on the amount of outstanding data in bytes.

+NewRenoConfig in noq::congestion - Rust

NewRenoConfig

Struct NewRenoConfig 

Source
pub struct NewRenoConfig { /* private fields */ }
Expand description

Configuration for the NewReno congestion controller

+

Implementations§

Source§

impl NewRenoConfig

Source

pub fn initial_window(&mut self, value: u64) -> &mut NewRenoConfig

Default limit on the amount of outstanding data in bytes.

Recommended value: min(10 * max_datagram_size, max(2 * max_datagram_size, 14720))

-

pub fn loss_reduction_factor(&mut self, value: f32) -> &mut NewRenoConfig

Reduction in congestion window when a new loss event is detected.

-

Trait Implementations§

§

impl Clone for NewRenoConfig

§

fn clone(&self) -> NewRenoConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
§

impl ControllerFactory for NewRenoConfig

§

fn build( +

Source

pub fn loss_reduction_factor(&mut self, value: f32) -> &mut NewRenoConfig

Reduction in congestion window when a new loss event is detected.

+

Trait Implementations§

Source§

impl Clone for NewRenoConfig

Source§

fn clone(&self) -> NewRenoConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl ControllerFactory for NewRenoConfig

Source§

fn build( self: Arc<NewRenoConfig>, now: Instant, current_mtu: u16, -) -> Box<dyn Controller>

Construct a fresh Controller
§

impl Debug for NewRenoConfig

§

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

Formats the value using the given formatter. Read more
§

impl Default for NewRenoConfig

§

fn default() -> NewRenoConfig

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +) -> Box<dyn Controller>

Construct a fresh Controller
Source§

impl Debug for NewRenoConfig

Source§

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

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

impl Default for NewRenoConfig

Source§

fn default() -> NewRenoConfig

Returns the “default value” for a type. Read more

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 diff --git a/pr/547/docs/noq/congestion/trait.Controller.html b/pr/547/docs/noq/congestion/trait.Controller.html index f73e6604d..e28ccb4d5 100644 --- a/pr/547/docs/noq/congestion/trait.Controller.html +++ b/pr/547/docs/noq/congestion/trait.Controller.html @@ -1,4 +1,4 @@ -Controller in noq::congestion - Rust

Controller

Trait Controller 

pub trait Controller:
+Controller in noq::congestion - Rust

Controller

Trait Controller 

Source
pub trait Controller:
     Send
     + Sync
     + Debug {
@@ -25,7 +25,7 @@
         sent: Instant,
         bytes: u64,
         app_limited: bool,
-        rtt: &RttEstimator,
+        rtt: &RttEstimator,
     ) { ... }
     fn on_end_acks(
         &mut self,
@@ -37,7 +37,7 @@
     fn on_spurious_congestion_event(&mut self) { ... }
     fn metrics(&self) -> ControllerMetrics { ... }
 }
Expand description

Common interface for different congestion controllers

-

Required Methods§

Required Methods§

Source

fn on_congestion_event( &mut self, now: Instant, sent: Instant, @@ -49,31 +49,31 @@ congestion threshold period ending when the most recent packet in this batch was sent were lost. lost_bytes indicates how many bytes were lost. This value will be 0 for ECN triggers.

-

fn on_mtu_update(&mut self, new_mtu: u16)

The known MTU for the current network path has been updated

-

fn window(&self) -> u64

Number of ack-eliciting bytes that may be in flight

-

fn clone_box(&self) -> Box<dyn Controller>

Duplicate the controller’s state

-

fn initial_window(&self) -> u64

Initial congestion window

-

fn into_any(self: Box<Self>) -> Box<dyn Any>

Returns Self for use in down-casting to extract implementation details

-

Provided Methods§

fn on_sent(&mut self, now: Instant, bytes: u64, last_packet_number: u64)

One or more packets were just sent

-

fn on_ack( +

Source

fn on_mtu_update(&mut self, new_mtu: u16)

The known MTU for the current network path has been updated

+
Source

fn window(&self) -> u64

Number of ack-eliciting bytes that may be in flight

+
Source

fn clone_box(&self) -> Box<dyn Controller>

Duplicate the controller’s state

+
Source

fn initial_window(&self) -> u64

Initial congestion window

+
Source

fn into_any(self: Box<Self>) -> Box<dyn Any>

Returns Self for use in down-casting to extract implementation details

+

Provided Methods§

Source

fn on_sent(&mut self, now: Instant, bytes: u64, last_packet_number: u64)

One or more packets were just sent

+
Source

fn on_ack( &mut self, now: Instant, sent: Instant, bytes: u64, app_limited: bool, - rtt: &RttEstimator, + rtt: &RttEstimator, )

Packet deliveries were confirmed

app_limited indicates whether the connection was blocked on outgoing application data prior to receiving these acknowledgements.

-

fn on_end_acks( +

Source

fn on_end_acks( &mut self, now: Instant, in_flight: u64, app_limited: bool, largest_packet_num_acked: Option<u64>, )

Packets are acked in batches, all with the same now argument. This indicates one of those batches has completed.

-

fn on_spurious_congestion_event(&mut self)

Packets were incorrectly deemed lost

+
Source

fn on_spurious_congestion_event(&mut self)

Packets were incorrectly deemed lost

This function is called when all packets that were deemed lost (for instance because of packet reordering) are acknowledged after the congestion event was raised.

-

fn metrics(&self) -> ControllerMetrics

Retrieve implementation-specific metrics used to populate qlog traces when they are enabled

-

Implementors§

\ No newline at end of file +
Source

fn metrics(&self) -> ControllerMetrics

Retrieve implementation-specific metrics used to populate qlog traces when they are enabled

+

Implementors§

\ No newline at end of file diff --git a/pr/547/docs/noq/congestion/trait.ControllerFactory.html b/pr/547/docs/noq/congestion/trait.ControllerFactory.html index 93add5e51..f6dd7b6ee 100644 --- a/pr/547/docs/noq/congestion/trait.ControllerFactory.html +++ b/pr/547/docs/noq/congestion/trait.ControllerFactory.html @@ -1,4 +1,4 @@ -ControllerFactory in noq::congestion - Rust

ControllerFactory

Trait ControllerFactory 

pub trait ControllerFactory {
+ControllerFactory in noq::congestion - Rust

ControllerFactory

Trait ControllerFactory 

Source
pub trait ControllerFactory {
     // Required method
     fn build(
         self: Arc<Self>,
@@ -6,5 +6,5 @@
         current_mtu: u16,
     ) -> Box<dyn Controller>;
 }
Expand description

Constructs controllers on demand

-

Required Methods§

fn build(self: Arc<Self>, now: Instant, current_mtu: u16) -> Box<dyn Controller>

Construct a fresh Controller

-

Implementors§

\ No newline at end of file +

Required Methods§

Source

fn build(self: Arc<Self>, now: Instant, current_mtu: u16) -> Box<dyn Controller>

Construct a fresh Controller

+

Implementors§

\ No newline at end of file diff --git a/pr/547/docs/noq/crypto/index.html b/pr/547/docs/noq/crypto/index.html index fcbfe7a14..3266d8e96 100644 --- a/pr/547/docs/noq/crypto/index.html +++ b/pr/547/docs/noq/crypto/index.html @@ -1,4 +1,4 @@ -noq::crypto - Rust

Module crypto

Module crypto 

Expand description

Traits and implementations for the QUIC cryptography protocol

+noq::crypto - Rust

Module crypto

Module crypto 

Source
Expand description

Traits and implementations for the QUIC cryptography protocol

The protocol logic in noq is contained in types that abstract over the actual cryptographic protocol used. This module contains the traits used for this abstraction layer as well as a single implementation of these traits that uses diff --git a/pr/547/docs/noq/crypto/rustls/index.html b/pr/547/docs/noq/crypto/rustls/index.html index 9ddd76feb..ca1fc066c 100644 --- a/pr/547/docs/noq/crypto/rustls/index.html +++ b/pr/547/docs/noq/crypto/rustls/index.html @@ -1,2 +1,2 @@ -noq::crypto::rustls - Rust

Module rustls

Module rustls 

Expand description

TLS interface based on rustls

+noq::crypto::rustls - Rust

Module rustls

Module rustls 

Source
Expand description

TLS interface based on rustls

Structs§

HandshakeData
Authentication data for (rustls) TLS session
NoInitialCipherSuite
The initial cipher suite (AES-128-GCM-SHA256) is not available
QuicClientConfig
A QUIC-compatible TLS client configuration
QuicServerConfig
A QUIC-compatible TLS server configuration
TlsSession
A rustls TLS session

Enums§

Error
rustls reports protocol errors using this type.
\ No newline at end of file diff --git a/pr/547/docs/noq/crypto/rustls/struct.HandshakeData.html b/pr/547/docs/noq/crypto/rustls/struct.HandshakeData.html index 0335c4da4..7c8e71954 100644 --- a/pr/547/docs/noq/crypto/rustls/struct.HandshakeData.html +++ b/pr/547/docs/noq/crypto/rustls/struct.HandshakeData.html @@ -1,4 +1,4 @@ -HandshakeData in noq::crypto::rustls - Rust

HandshakeData

Struct HandshakeData 

pub struct HandshakeData {
+HandshakeData in noq::crypto::rustls - Rust

HandshakeData

Struct HandshakeData 

Source
pub struct HandshakeData {
     pub protocol: Option<Vec<u8>>,
     pub server_name: Option<String>,
     pub negotiated_key_exchange_group: NamedGroup,
diff --git a/pr/547/docs/noq/crypto/rustls/struct.NoInitialCipherSuite.html b/pr/547/docs/noq/crypto/rustls/struct.NoInitialCipherSuite.html
index a9152156a..4b1d48e9a 100644
--- a/pr/547/docs/noq/crypto/rustls/struct.NoInitialCipherSuite.html
+++ b/pr/547/docs/noq/crypto/rustls/struct.NoInitialCipherSuite.html
@@ -1,8 +1,8 @@
-NoInitialCipherSuite in noq::crypto::rustls - Rust

NoInitialCipherSuite

Struct NoInitialCipherSuite 

pub struct NoInitialCipherSuite { /* private fields */ }
Expand description

The initial cipher suite (AES-128-GCM-SHA256) is not available

+NoInitialCipherSuite in noq::crypto::rustls - Rust

NoInitialCipherSuite

Struct NoInitialCipherSuite 

Source
pub struct NoInitialCipherSuite { /* private fields */ }
Expand description

The initial cipher suite (AES-128-GCM-SHA256) is not available

When the cipher suite is supplied with_initial(), it must be [CipherSuite::TLS13_AES_128_GCM_SHA256]. When the cipher suite is derived from a config’s CryptoProvider, that provider must reference a cipher suite with the same ID.

-

Trait Implementations§

§

impl Clone for NoInitialCipherSuite

§

fn clone(&self) -> NoInitialCipherSuite

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
§

impl Debug for NoInitialCipherSuite

§

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

Formats the value using the given formatter. Read more
§

impl Display for NoInitialCipherSuite

§

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

Formats the value using the given formatter. Read more
§

impl Error for NoInitialCipherSuite

1.30.0 · Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where +

Trait Implementations§

Source§

impl Clone for NoInitialCipherSuite

Source§

fn clone(&self) -> NoInitialCipherSuite

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for NoInitialCipherSuite

Source§

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

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

impl Display for NoInitialCipherSuite

Source§

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

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

impl Error for NoInitialCipherSuite

1.30.0 · Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more

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 diff --git a/pr/547/docs/noq/crypto/rustls/struct.QuicClientConfig.html b/pr/547/docs/noq/crypto/rustls/struct.QuicClientConfig.html index 0b97ef82b..284c48f71 100644 --- a/pr/547/docs/noq/crypto/rustls/struct.QuicClientConfig.html +++ b/pr/547/docs/noq/crypto/rustls/struct.QuicClientConfig.html @@ -1,4 +1,4 @@ -QuicClientConfig in noq::crypto::rustls - Rust

QuicClientConfig

Struct QuicClientConfig 

pub struct QuicClientConfig { /* private fields */ }
Expand description

A QUIC-compatible TLS client configuration

+QuicClientConfig in noq::crypto::rustls - Rust

QuicClientConfig

Struct QuicClientConfig 

Source
pub struct QuicClientConfig { /* private fields */ }
Expand description

A QUIC-compatible TLS client configuration

noq implicitly constructs a QuicClientConfig with reasonable defaults within ClientConfig::with_root_certificates() and ClientConfig::try_with_platform_verifier(). Alternatively, QuicClientConfig’s TryFrom implementation can be used to wrap around a @@ -12,20 +12,20 @@ outgoing connections. calling into_0rtt on outgoing connections returns Ok or Err. It typically allows into_0rtt to proceed if it recognizes the server name, and defaults to an in-memory cache of 256 server names.

-

Implementations§

§

impl QuicClientConfig

pub fn with_initial( +

Implementations§

Source§

impl QuicClientConfig

Source

pub fn with_initial( inner: Arc<ClientConfig>, initial: Suite, ) -> Result<QuicClientConfig, NoInitialCipherSuite>

Initialize a QUIC-compatible TLS client configuration with a separate initial cipher suite

This is useful if you want to avoid the initial cipher suite for traffic encryption.

-

pub fn set_alpn_protocols(&mut self, alpn_protocols: Vec<Vec<u8>>)

Updates the set of ALPN protocols configured in the client config.

-

Trait Implementations§

§

impl ClientConfig for QuicClientConfig

Source

pub fn set_alpn_protocols(&mut self, alpn_protocols: Vec<Vec<u8>>)

Updates the set of ALPN protocols configured in the client config.

+

Trait Implementations§

Source§

impl ClientConfig for QuicClientConfig

Source§

fn start_session( &self, version: u32, server_name: &str, - params: &TransportParameters, -) -> Result<Box<dyn Session>, ConnectError>

Start a client session with this configuration
§

impl Clone for QuicClientConfig

§

fn clone(&self) -> QuicClientConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
§

impl TryFrom<Arc<ClientConfig>> for QuicClientConfig

§

type Error = NoInitialCipherSuite

The type returned in the event of a conversion error.
§

fn try_from( + params: &TransportParameters, +) -> Result<Box<dyn Session>, ConnectError>

Start a client session with this configuration
Source§

impl Clone for QuicClientConfig

Source§

fn clone(&self) -> QuicClientConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl TryFrom<Arc<ClientConfig>> for QuicClientConfig

Source§

type Error = NoInitialCipherSuite

The type returned in the event of a conversion error.
Source§

fn try_from( inner: Arc<ClientConfig>, -) -> Result<QuicClientConfig, <QuicClientConfig as TryFrom<Arc<ClientConfig>>>::Error>

Performs the conversion.
§

impl TryFrom<ClientConfig> for QuicClientConfig

§

type Error = NoInitialCipherSuite

The type returned in the event of a conversion error.
§

fn try_from( +) -> Result<QuicClientConfig, <QuicClientConfig as TryFrom<Arc<ClientConfig>>>::Error>

Performs the conversion.
Source§

impl TryFrom<ClientConfig> for QuicClientConfig

Source§

type Error = NoInitialCipherSuite

The type returned in the event of a conversion error.
Source§

fn try_from( inner: ClientConfig, ) -> Result<QuicClientConfig, <QuicClientConfig as TryFrom<ClientConfig>>::Error>

Performs the conversion.

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 diff --git a/pr/547/docs/noq/crypto/rustls/struct.QuicServerConfig.html b/pr/547/docs/noq/crypto/rustls/struct.QuicServerConfig.html index 1e7f4f041..66348a7f1 100644 --- a/pr/547/docs/noq/crypto/rustls/struct.QuicServerConfig.html +++ b/pr/547/docs/noq/crypto/rustls/struct.QuicServerConfig.html @@ -1,4 +1,4 @@ -QuicServerConfig in noq::crypto::rustls - Rust

QuicServerConfig

Struct QuicServerConfig 

pub struct QuicServerConfig { /* private fields */ }
Expand description

A QUIC-compatible TLS server configuration

+QuicServerConfig in noq::crypto::rustls - Rust

QuicServerConfig

Struct QuicServerConfig 

Source
pub struct QuicServerConfig { /* private fields */ }
Expand description

A QUIC-compatible TLS server configuration

noq implicitly constructs a QuicServerConfig with reasonable defaults within ServerConfig::with_single_cert(). Alternatively, QuicServerConfig’s TryFrom implementation or with_initial method can be used to wrap around a custom @@ -8,28 +8,28 @@ implementation or with_initial method can be used to wrap around a incoming 0-RTT data. QUIC prohibits max_early_data_size values other than 0 or u32::MAX.

  • The rustls::ServerConfig must have TLS 1.3 support enabled for conversion to succeed.
  • -

    Implementations§

    §

    impl QuicServerConfig

    pub fn with_initial( +

    Implementations§

    Source§

    impl QuicServerConfig

    Source

    pub fn with_initial( inner: Arc<ServerConfig>, initial: Suite, ) -> Result<QuicServerConfig, NoInitialCipherSuite>

    Initialize a QUIC-compatible TLS client configuration with a separate initial cipher suite

    This is useful if you want to avoid the initial cipher suite for traffic encryption.

    -

    pub fn set_alpn_protocols(&mut self, alpn_protocols: Vec<Vec<u8>>)

    Updates the set of ALPN protocols configured in the server config.

    -

    Trait Implementations§

    §

    impl Clone for QuicServerConfig

    §

    fn clone(&self) -> QuicServerConfig

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    §

    impl ServerConfig for QuicServerConfig

    Source

    pub fn set_alpn_protocols(&mut self, alpn_protocols: Vec<Vec<u8>>)

    Updates the set of ALPN protocols configured in the server config.

    +

    Trait Implementations§

    Source§

    impl Clone for QuicServerConfig

    Source§

    fn clone(&self) -> QuicServerConfig

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    Source§

    impl ServerConfig for QuicServerConfig

    Source§

    fn start_session( &self, version: u32, - params: &TransportParameters, -) -> Box<dyn Session>

    Start a server session with this configuration Read more
    §

    fn initial_keys( + params: &TransportParameters, +) -> Box<dyn Session>

    Start a server session with this configuration Read more
    Source§

    fn initial_keys( &self, version: u32, dst_cid: ConnectionId, -) -> Result<Keys, UnsupportedVersion>

    Create the initial set of keys given the client’s initial destination ConnectionId
    §

    fn retry_tag( +) -> Result<Keys, UnsupportedVersion>

    Create the initial set of keys given the client’s initial destination ConnectionId
    Source§

    fn retry_tag( &self, version: u32, orig_dst_cid: ConnectionId, packet: &[u8], -) -> [u8; 16]

    Generate the integrity tag for a retry packet Read more
    §

    impl TryFrom<Arc<ServerConfig>> for QuicServerConfig

    §

    type Error = NoInitialCipherSuite

    The type returned in the event of a conversion error.
    §

    fn try_from( +) -> [u8; 16]

    Generate the integrity tag for a retry packet Read more
    Source§

    impl TryFrom<Arc<ServerConfig>> for QuicServerConfig

    Source§

    type Error = NoInitialCipherSuite

    The type returned in the event of a conversion error.
    Source§

    fn try_from( inner: Arc<ServerConfig>, -) -> Result<QuicServerConfig, <QuicServerConfig as TryFrom<Arc<ServerConfig>>>::Error>

    Performs the conversion.
    §

    impl TryFrom<ServerConfig> for QuicServerConfig

    §

    type Error = NoInitialCipherSuite

    The type returned in the event of a conversion error.
    §

    fn try_from( +) -> Result<QuicServerConfig, <QuicServerConfig as TryFrom<Arc<ServerConfig>>>::Error>

    Performs the conversion.
    Source§

    impl TryFrom<ServerConfig> for QuicServerConfig

    Source§

    type Error = NoInitialCipherSuite

    The type returned in the event of a conversion error.
    Source§

    fn try_from( inner: ServerConfig, ) -> Result<QuicServerConfig, <QuicServerConfig as TryFrom<ServerConfig>>::Error>

    Performs the conversion.

    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 diff --git a/pr/547/docs/noq/crypto/rustls/struct.TlsSession.html b/pr/547/docs/noq/crypto/rustls/struct.TlsSession.html index 87d935004..29977f219 100644 --- a/pr/547/docs/noq/crypto/rustls/struct.TlsSession.html +++ b/pr/547/docs/noq/crypto/rustls/struct.TlsSession.html @@ -1,11 +1,11 @@ -TlsSession in noq::crypto::rustls - Rust

    TlsSession

    Struct TlsSession 

    pub struct TlsSession { /* private fields */ }
    Expand description

    A rustls TLS session

    -

    Trait Implementations§

    §

    impl Session for TlsSession

    §

    fn peer_identity(&self) -> Option<Box<dyn Any>>

    For the rustls TlsSession, the Any type is Vec<rustls::pki_types::CertificateDer>

    -
    §

    fn initial_keys(&self, dst_cid: ConnectionId, side: Side) -> Keys

    Create the initial set of keys given the client’s initial destination ConnectionId
    §

    fn handshake_data(&self) -> Option<Box<dyn Any>>

    Get data negotiated during the handshake, if available Read more
    §

    fn early_crypto(&self) -> Option<(Box<dyn HeaderKey>, Box<dyn PacketKey>)>

    Get the 0-RTT keys if available (clients only) Read more
    §

    fn early_data_accepted(&self) -> Option<bool>

    If the 0-RTT-encrypted data has been accepted by the peer
    §

    fn is_handshaking(&self) -> bool

    Returns true until the connection is fully established.
    §

    fn read_handshake(&mut self, buf: &[u8]) -> Result<bool, Error>

    Read bytes of handshake data Read more
    §

    fn transport_parameters(&self) -> Result<Option<TransportParameters>, Error>

    The peer’s QUIC transport parameters Read more
    §

    fn write_handshake(&mut self, buf: &mut Vec<u8>) -> Option<Keys>

    Writes handshake bytes into the given buffer and optionally returns the negotiated keys Read more
    §

    fn next_1rtt_keys(&mut self) -> Option<KeyPair<Box<dyn PacketKey>>>

    Compute keys for the next key update
    §

    fn is_valid_retry( +TlsSession in noq::crypto::rustls - Rust

    TlsSession

    Struct TlsSession 

    Source
    pub struct TlsSession { /* private fields */ }
    Expand description

    A rustls TLS session

    +

    Trait Implementations§

    Source§

    impl Session for TlsSession

    Source§

    fn peer_identity(&self) -> Option<Box<dyn Any>>

    For the rustls TlsSession, the Any type is Vec<rustls::pki_types::CertificateDer>

    +
    Source§

    fn initial_keys(&self, dst_cid: ConnectionId, side: Side) -> Keys

    Create the initial set of keys given the client’s initial destination ConnectionId
    Source§

    fn handshake_data(&self) -> Option<Box<dyn Any>>

    Get data negotiated during the handshake, if available Read more
    Source§

    fn early_crypto(&self) -> Option<(Box<dyn HeaderKey>, Box<dyn PacketKey>)>

    Get the 0-RTT keys if available (clients only) Read more
    Source§

    fn early_data_accepted(&self) -> Option<bool>

    If the 0-RTT-encrypted data has been accepted by the peer
    Source§

    fn is_handshaking(&self) -> bool

    Returns true until the connection is fully established.
    Source§

    fn read_handshake(&mut self, buf: &[u8]) -> Result<bool, Error>

    Read bytes of handshake data Read more
    Source§

    fn transport_parameters(&self) -> Result<Option<TransportParameters>, Error>

    The peer’s QUIC transport parameters Read more
    Source§

    fn write_handshake(&mut self, buf: &mut Vec<u8>) -> Option<Keys>

    Writes handshake bytes into the given buffer and optionally returns the negotiated keys Read more
    Source§

    fn next_1rtt_keys(&mut self) -> Option<KeyPair<Box<dyn PacketKey>>>

    Compute keys for the next key update
    Source§

    fn is_valid_retry( &self, orig_dst_cid: ConnectionId, header: &[u8], payload: &[u8], -) -> bool

    Verify the integrity of a retry packet Read more
    §

    fn export_keying_material( +) -> bool

    Verify the integrity of a retry packet Read more
    Source§

    fn export_keying_material( &self, output: &mut [u8], label: &[u8], diff --git a/pr/547/docs/noq/crypto/struct.CryptoError.html b/pr/547/docs/noq/crypto/struct.CryptoError.html index 241b8f10b..9972e9f65 100644 --- a/pr/547/docs/noq/crypto/struct.CryptoError.html +++ b/pr/547/docs/noq/crypto/struct.CryptoError.html @@ -1,5 +1,5 @@ -CryptoError in noq::crypto - Rust

    CryptoError

    Struct CryptoError 

    pub struct CryptoError;
    Expand description

    Generic crypto errors

    -

    Trait Implementations§

    §

    impl Debug for CryptoError

    §

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

    Formats the value using the given formatter. Read more
    §

    impl From<Unspecified> for CryptoError

    §

    fn from(_: Unspecified) -> CryptoError

    Converts to this type from the input type.

    Auto Trait Implementations§

    Blanket Implementations§

    Source§

    impl<T> Any for T
    where +CryptoError in noq::crypto - Rust

    CryptoError

    Struct CryptoError 

    Source
    pub struct CryptoError;
    Expand description

    Generic crypto errors

    +

    Trait Implementations§

    Source§

    impl Debug for CryptoError

    Source§

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

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

    impl From<Unspecified> for CryptoError

    Source§

    fn from(_: Unspecified) -> CryptoError

    Converts to this type from the input type.

    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> From<T> for T

    Source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/pr/547/docs/noq/crypto/struct.ExportKeyingMaterialError.html b/pr/547/docs/noq/crypto/struct.ExportKeyingMaterialError.html index 0b2b60f7a..0c542ab5e 100644 --- a/pr/547/docs/noq/crypto/struct.ExportKeyingMaterialError.html +++ b/pr/547/docs/noq/crypto/struct.ExportKeyingMaterialError.html @@ -1,7 +1,7 @@ -ExportKeyingMaterialError in noq::crypto - Rust

    ExportKeyingMaterialError

    Struct ExportKeyingMaterialError 

    pub struct ExportKeyingMaterialError;
    Expand description

    Error returned by Session::export_keying_material.

    +ExportKeyingMaterialError in noq::crypto - Rust

    ExportKeyingMaterialError

    Struct ExportKeyingMaterialError 

    Source
    pub struct ExportKeyingMaterialError;
    Expand description

    Error returned by Session::export_keying_material.

    This error occurs if the requested output length is too large.

    -

    Trait Implementations§

    §

    impl Debug for ExportKeyingMaterialError

    §

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

    Formats the value using the given formatter. Read more
    §

    impl PartialEq for ExportKeyingMaterialError

    §

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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.
    §

    impl Eq for ExportKeyingMaterialError

    §

    impl StructuralPartialEq for ExportKeyingMaterialError

    Auto Trait Implementations§

    Blanket Implementations§

    Source§

    impl<T> Any for T
    where +

    Trait Implementations§

    Source§

    impl Debug for ExportKeyingMaterialError

    Source§

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

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

    impl PartialEq for ExportKeyingMaterialError

    Source§

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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 ExportKeyingMaterialError

    Source§

    impl StructuralPartialEq for ExportKeyingMaterialError

    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
    §

    impl<Q, K> Equivalent<K> for Q
    where diff --git a/pr/547/docs/noq/crypto/struct.KeyPair.html b/pr/547/docs/noq/crypto/struct.KeyPair.html index 0efcf9b35..b04e27a1d 100644 --- a/pr/547/docs/noq/crypto/struct.KeyPair.html +++ b/pr/547/docs/noq/crypto/struct.KeyPair.html @@ -1,4 +1,4 @@ -KeyPair in noq::crypto - Rust

    KeyPair

    Struct KeyPair 

    pub struct KeyPair<T> {
    +KeyPair in noq::crypto - Rust

    KeyPair

    Struct KeyPair 

    Source
    pub struct KeyPair<T> {
         pub local: T,
         pub remote: T,
     }
    Expand description

    A pair of keys for bidirectional communication

    diff --git a/pr/547/docs/noq/crypto/struct.Keys.html b/pr/547/docs/noq/crypto/struct.Keys.html index 1b0cf0bb5..9a2f6ee75 100644 --- a/pr/547/docs/noq/crypto/struct.Keys.html +++ b/pr/547/docs/noq/crypto/struct.Keys.html @@ -1,4 +1,4 @@ -Keys in noq::crypto - Rust

    Keys

    Struct Keys 

    pub struct Keys {
    +Keys in noq::crypto - Rust

    Keys

    Struct Keys 

    Source
    pub struct Keys {
         pub header: KeyPair<Box<dyn HeaderKey>>,
         pub packet: KeyPair<Box<dyn PacketKey>>,
     }
    Expand description

    A complete set of keys for a certain packet space

    diff --git a/pr/547/docs/noq/crypto/struct.UnsupportedVersion.html b/pr/547/docs/noq/crypto/struct.UnsupportedVersion.html index c27892c94..f77ec3a68 100644 --- a/pr/547/docs/noq/crypto/struct.UnsupportedVersion.html +++ b/pr/547/docs/noq/crypto/struct.UnsupportedVersion.html @@ -1,5 +1,5 @@ -UnsupportedVersion in noq::crypto - Rust

    UnsupportedVersion

    Struct UnsupportedVersion 

    pub struct UnsupportedVersion;
    Expand description

    Error indicating that the specified QUIC version is not supported

    -

    Trait Implementations§

    §

    impl Debug for UnsupportedVersion

    §

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

    Formats the value using the given formatter. Read more
    §

    impl From<UnsupportedVersion> for ConnectError

    §

    fn from(_: UnsupportedVersion) -> ConnectError

    Converts to this type from the input type.

    Auto Trait Implementations§

    Blanket Implementations§

    Source§

    impl<T> Any for T
    where +UnsupportedVersion in noq::crypto - Rust

    UnsupportedVersion

    Struct UnsupportedVersion 

    Source
    pub struct UnsupportedVersion;
    Expand description

    Error indicating that the specified QUIC version is not supported

    +

    Trait Implementations§

    Source§

    impl Debug for UnsupportedVersion

    Source§

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

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

    impl From<UnsupportedVersion> for ConnectError

    Source§

    fn from(_: UnsupportedVersion) -> ConnectError

    Converts to this type from the input type.

    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> From<T> for T

    Source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/pr/547/docs/noq/crypto/trait.ClientConfig.html b/pr/547/docs/noq/crypto/trait.ClientConfig.html index c1050f10b..613ecf973 100644 --- a/pr/547/docs/noq/crypto/trait.ClientConfig.html +++ b/pr/547/docs/noq/crypto/trait.ClientConfig.html @@ -1,16 +1,16 @@ -ClientConfig in noq::crypto - Rust

    ClientConfig

    Trait ClientConfig 

    pub trait ClientConfig: Send + Sync {
    +ClientConfig in noq::crypto - Rust

    ClientConfig

    Trait ClientConfig 

    Source
    pub trait ClientConfig: Send + Sync {
         // Required method
         fn start_session(
             &self,
             version: u32,
             server_name: &str,
    -        params: &TransportParameters,
    +        params: &TransportParameters,
         ) -> Result<Box<dyn Session>, ConnectError>;
     }
    Expand description

    Client-side configuration for the crypto protocol

    -

    Required Methods§

    Required Methods§

    Source

    fn start_session( &self, version: u32, server_name: &str, - params: &TransportParameters, + params: &TransportParameters, ) -> Result<Box<dyn Session>, ConnectError>

    Start a client session with this configuration

    -

    Implementors§

    \ No newline at end of file +

    Implementors§

    \ No newline at end of file diff --git a/pr/547/docs/noq/crypto/trait.HandshakeTokenKey.html b/pr/547/docs/noq/crypto/trait.HandshakeTokenKey.html index 907ba4dd6..d1afef56b 100644 --- a/pr/547/docs/noq/crypto/trait.HandshakeTokenKey.html +++ b/pr/547/docs/noq/crypto/trait.HandshakeTokenKey.html @@ -1,4 +1,4 @@ -HandshakeTokenKey in noq::crypto - Rust

    HandshakeTokenKey

    Trait HandshakeTokenKey 

    pub trait HandshakeTokenKey: Send + Sync {
    +HandshakeTokenKey in noq::crypto - Rust

    HandshakeTokenKey

    Trait HandshakeTokenKey 

    Source
    pub trait HandshakeTokenKey: Send + Sync {
         // Required methods
         fn seal(
             &self,
    @@ -11,10 +11,10 @@
             data: &'a mut [u8],
         ) -> Result<&'a [u8], CryptoError>;
     }
    Expand description

    The trait for encrypting tokens that power retry packets and NEW_TOKEN frames.

    -

    Required Methods§

    fn seal(&self, token_nonce: u128, data: &mut Vec<u8>) -> Result<(), CryptoError>

    Method for sealing a token in-place.

    +

    Required Methods§

    Source

    fn seal(&self, token_nonce: u128, data: &mut Vec<u8>) -> Result<(), CryptoError>

    Method for sealing a token in-place.

    The nonce doesn’t need to be attached to the ciphertext, but the authentication tag is expected to be appended to data.

    -

    fn open<'a>( +

    Source

    fn open<'a>( &self, token_nonce: u128, data: &'a mut [u8], diff --git a/pr/547/docs/noq/crypto/trait.HeaderKey.html b/pr/547/docs/noq/crypto/trait.HeaderKey.html index 0d1435da9..bd43de09f 100644 --- a/pr/547/docs/noq/crypto/trait.HeaderKey.html +++ b/pr/547/docs/noq/crypto/trait.HeaderKey.html @@ -1,10 +1,10 @@ -HeaderKey in noq::crypto - Rust

    HeaderKey

    Trait HeaderKey 

    pub trait HeaderKey: Send + Sync {
    +HeaderKey in noq::crypto - Rust

    HeaderKey

    Trait HeaderKey 

    Source
    pub trait HeaderKey: Send + Sync {
         // Required methods
         fn decrypt(&self, pn_offset: usize, packet: &mut [u8]);
         fn encrypt(&self, pn_offset: usize, packet: &mut [u8]);
         fn sample_size(&self) -> usize;
     }
    Expand description

    Keys used to protect packet headers

    -

    Required Methods§

    fn decrypt(&self, pn_offset: usize, packet: &mut [u8])

    Decrypt the given packet’s header

    -

    fn encrypt(&self, pn_offset: usize, packet: &mut [u8])

    Encrypt the given packet’s header

    -

    fn sample_size(&self) -> usize

    The sample size used for this key’s algorithm

    -

    Implementations on Foreign Types§

    §

    impl HeaderKey for Box<dyn HeaderProtectionKey>

    §

    fn decrypt(&self, pn_offset: usize, packet: &mut [u8])

    §

    fn encrypt(&self, pn_offset: usize, packet: &mut [u8])

    §

    fn sample_size(&self) -> usize

    Implementors§

    \ No newline at end of file +

    Required Methods§

    Source

    fn decrypt(&self, pn_offset: usize, packet: &mut [u8])

    Decrypt the given packet’s header

    +
    Source

    fn encrypt(&self, pn_offset: usize, packet: &mut [u8])

    Encrypt the given packet’s header

    +
    Source

    fn sample_size(&self) -> usize

    The sample size used for this key’s algorithm

    +

    Implementations on Foreign Types§

    Source§

    impl HeaderKey for Box<dyn HeaderProtectionKey>

    Source§

    fn decrypt(&self, pn_offset: usize, packet: &mut [u8])

    Source§

    fn encrypt(&self, pn_offset: usize, packet: &mut [u8])

    Source§

    fn sample_size(&self) -> usize

    Implementors§

    \ No newline at end of file diff --git a/pr/547/docs/noq/crypto/trait.HmacKey.html b/pr/547/docs/noq/crypto/trait.HmacKey.html index 4b5f2d4bb..9b9937114 100644 --- a/pr/547/docs/noq/crypto/trait.HmacKey.html +++ b/pr/547/docs/noq/crypto/trait.HmacKey.html @@ -1,10 +1,10 @@ -HmacKey in noq::crypto - Rust

    HmacKey

    Trait HmacKey 

    pub trait HmacKey: Send + Sync {
    +HmacKey in noq::crypto - Rust

    HmacKey

    Trait HmacKey 

    Source
    pub trait HmacKey: Send + Sync {
         // Required methods
         fn sign(&self, data: &[u8], signature_out: &mut [u8]);
         fn signature_len(&self) -> usize;
         fn verify(&self, data: &[u8], signature: &[u8]) -> Result<(), CryptoError>;
     }
    Expand description

    A key for signing with HMAC-based algorithms

    -

    Required Methods§

    fn sign(&self, data: &[u8], signature_out: &mut [u8])

    Method for signing a message

    -

    fn signature_len(&self) -> usize

    Length of sign’s output

    -

    fn verify(&self, data: &[u8], signature: &[u8]) -> Result<(), CryptoError>

    Method for verifying a message

    -

    Implementations on Foreign Types§

    §

    impl HmacKey for Key

    §

    fn sign(&self, data: &[u8], out: &mut [u8])

    §

    fn signature_len(&self) -> usize

    §

    fn verify(&self, data: &[u8], signature: &[u8]) -> Result<(), CryptoError>

    Implementors§

    \ No newline at end of file +

    Required Methods§

    Source

    fn sign(&self, data: &[u8], signature_out: &mut [u8])

    Method for signing a message

    +
    Source

    fn signature_len(&self) -> usize

    Length of sign’s output

    +
    Source

    fn verify(&self, data: &[u8], signature: &[u8]) -> Result<(), CryptoError>

    Method for verifying a message

    +

    Implementations on Foreign Types§

    Source§

    impl HmacKey for Key

    Source§

    fn sign(&self, data: &[u8], out: &mut [u8])

    Source§

    fn signature_len(&self) -> usize

    Source§

    fn verify(&self, data: &[u8], signature: &[u8]) -> Result<(), CryptoError>

    Implementors§

    \ No newline at end of file diff --git a/pr/547/docs/noq/crypto/trait.PacketKey.html b/pr/547/docs/noq/crypto/trait.PacketKey.html index cafc8eb1e..c670d4f6b 100644 --- a/pr/547/docs/noq/crypto/trait.PacketKey.html +++ b/pr/547/docs/noq/crypto/trait.PacketKey.html @@ -1,4 +1,4 @@ -PacketKey in noq::crypto - Rust

    PacketKey

    Trait PacketKey 

    pub trait PacketKey: Send + Sync {
    +PacketKey in noq::crypto - Rust

    PacketKey

    Trait PacketKey 

    Source
    pub trait PacketKey: Send + Sync {
         // Required methods
         fn encrypt(
             &self,
    @@ -18,34 +18,34 @@
         fn confidentiality_limit(&self) -> u64;
         fn integrity_limit(&self) -> u64;
     }
    Expand description

    Keys used to protect packet payloads

    -

    Required Methods§

    fn encrypt( +

    Required Methods§

    Source

    fn encrypt( &self, path_id: PathId, packet: u64, buf: &mut [u8], header_len: usize, )

    Encrypt the packet payload with the given packet number

    -

    fn decrypt( +

    Source

    fn decrypt( &self, path_id: PathId, packet: u64, header: &[u8], payload: &mut BytesMut, ) -> Result<(), CryptoError>

    Decrypt the packet payload with the given packet number

    -

    fn tag_len(&self) -> usize

    The length of the AEAD tag appended to packets on encryption

    -

    fn confidentiality_limit(&self) -> u64

    Maximum number of packets that may be sent using a single key

    -

    fn integrity_limit(&self) -> u64

    Maximum number of incoming packets that may fail decryption before the connection must be +

    Source

    fn tag_len(&self) -> usize

    The length of the AEAD tag appended to packets on encryption

    +
    Source

    fn confidentiality_limit(&self) -> u64

    Maximum number of packets that may be sent using a single key

    +
    Source

    fn integrity_limit(&self) -> u64

    Maximum number of incoming packets that may fail decryption before the connection must be abandoned

    -

    Implementations on Foreign Types§

    §

    impl PacketKey for Box<dyn PacketKey>

    §

    fn encrypt( +

    Implementations on Foreign Types§

    Source§

    impl PacketKey for Box<dyn PacketKey>

    Source§

    fn encrypt( &self, path_id: PathId, packet: u64, buf: &mut [u8], header_len: usize, -)

    §

    fn decrypt( +)

    Source§

    fn decrypt( &self, path_id: PathId, packet: u64, header: &[u8], payload: &mut BytesMut, -) -> Result<(), CryptoError>

    §

    fn tag_len(&self) -> usize

    §

    fn confidentiality_limit(&self) -> u64

    §

    fn integrity_limit(&self) -> u64

    Implementors§

    \ No newline at end of file +) -> Result<(), CryptoError>

    Source§

    fn tag_len(&self) -> usize

    Source§

    fn confidentiality_limit(&self) -> u64

    Source§

    fn integrity_limit(&self) -> u64

    Implementors§

    \ No newline at end of file diff --git a/pr/547/docs/noq/crypto/trait.ServerConfig.html b/pr/547/docs/noq/crypto/trait.ServerConfig.html index 21cc0eaf4..1bab34898 100644 --- a/pr/547/docs/noq/crypto/trait.ServerConfig.html +++ b/pr/547/docs/noq/crypto/trait.ServerConfig.html @@ -1,4 +1,4 @@ -ServerConfig in noq::crypto - Rust

    ServerConfig

    Trait ServerConfig 

    pub trait ServerConfig: Send + Sync {
    +ServerConfig in noq::crypto - Rust

    ServerConfig

    Trait ServerConfig 

    Source
    pub trait ServerConfig: Send + Sync {
         // Required methods
         fn initial_keys(
             &self,
    @@ -14,15 +14,15 @@
         fn start_session(
             &self,
             version: u32,
    -        params: &TransportParameters,
    +        params: &TransportParameters,
         ) -> Box<dyn Session>;
     }
    Expand description

    Server-side configuration for the crypto protocol

    -

    Required Methods§

    Required Methods§

    Source

    fn initial_keys( &self, version: u32, dst_cid: ConnectionId, ) -> Result<Keys, UnsupportedVersion>

    Create the initial set of keys given the client’s initial destination ConnectionId

    -

    fn retry_tag( +

    Source

    fn retry_tag( &self, version: u32, orig_dst_cid: ConnectionId, @@ -30,10 +30,10 @@ ) -> [u8; 16]

    Generate the integrity tag for a retry packet

    Never called if initial_keys rejected version.

    See the specification: https://www.rfc-editor.org/rfc/rfc9001#name-retry-packet-integrity

    -

    fn start_session( +

    Source

    fn start_session( &self, version: u32, - params: &TransportParameters, + params: &TransportParameters, ) -> Box<dyn Session>

    Start a server session with this configuration

    Never called if initial_keys rejected version.

    -

    Implementors§

    \ No newline at end of file +

    Implementors§

    \ No newline at end of file diff --git a/pr/547/docs/noq/crypto/trait.Session.html b/pr/547/docs/noq/crypto/trait.Session.html index a384ae3a3..b85c826d9 100644 --- a/pr/547/docs/noq/crypto/trait.Session.html +++ b/pr/547/docs/noq/crypto/trait.Session.html @@ -1,4 +1,4 @@ -Session in noq::crypto - Rust

    Session

    Trait Session 

    pub trait Session:
    +Session in noq::crypto - Rust

    Session

    Trait Session 

    Source
    pub trait Session:
         Send
         + Sync
         + 'static {
    @@ -9,8 +9,8 @@
         fn early_crypto(&self) -> Option<(Box<dyn HeaderKey>, Box<dyn PacketKey>)>;
         fn early_data_accepted(&self) -> Option<bool>;
         fn is_handshaking(&self) -> bool;
    -    fn read_handshake(&mut self, buf: &[u8]) -> Result<bool, Error>;
    -    fn transport_parameters(&self) -> Result<Option<TransportParameters>, Error>;
    +    fn read_handshake(&mut self, buf: &[u8]) -> Result<bool, Error>;
    +    fn transport_parameters(&self) -> Result<Option<TransportParameters>, Error>;
         fn write_handshake(&mut self, buf: &mut Vec<u8>) -> Option<Keys>;
         fn next_1rtt_keys(&mut self) -> Option<KeyPair<Box<dyn PacketKey>>>;
         fn is_valid_retry(
    @@ -26,37 +26,37 @@
             context: &[u8],
         ) -> Result<(), ExportKeyingMaterialError>;
     }
    Expand description

    A cryptographic session (commonly TLS)

    -

    Required Methods§

    fn initial_keys(&self, dst_cid: ConnectionId, side: Side) -> Keys

    Create the initial set of keys given the client’s initial destination ConnectionId

    -

    fn handshake_data(&self) -> Option<Box<dyn Any>>

    Get data negotiated during the handshake, if available

    +

    Required Methods§

    Source

    fn initial_keys(&self, dst_cid: ConnectionId, side: Side) -> Keys

    Create the initial set of keys given the client’s initial destination ConnectionId

    +
    Source

    fn handshake_data(&self) -> Option<Box<dyn Any>>

    Get data negotiated during the handshake, if available

    Returns None until the connection emits HandshakeDataReady.

    -

    fn peer_identity(&self) -> Option<Box<dyn Any>>

    Get the peer’s identity, if available

    -

    fn early_crypto(&self) -> Option<(Box<dyn HeaderKey>, Box<dyn PacketKey>)>

    Get the 0-RTT keys if available (clients only)

    +
    Source

    fn peer_identity(&self) -> Option<Box<dyn Any>>

    Get the peer’s identity, if available

    +
    Source

    fn early_crypto(&self) -> Option<(Box<dyn HeaderKey>, Box<dyn PacketKey>)>

    Get the 0-RTT keys if available (clients only)

    On the client side, this method can be used to see if 0-RTT key material is available to start sending data before the protocol handshake has completed.

    Returns None if the key material is not available. This might happen if you have not connected to this server before.

    -

    fn early_data_accepted(&self) -> Option<bool>

    If the 0-RTT-encrypted data has been accepted by the peer

    -

    fn is_handshaking(&self) -> bool

    Returns true until the connection is fully established.

    -

    fn read_handshake(&mut self, buf: &[u8]) -> Result<bool, Error>

    Read bytes of handshake data

    +
    Source

    fn early_data_accepted(&self) -> Option<bool>

    If the 0-RTT-encrypted data has been accepted by the peer

    +
    Source

    fn is_handshaking(&self) -> bool

    Returns true until the connection is fully established.

    +
    Source

    fn read_handshake(&mut self, buf: &[u8]) -> Result<bool, Error>

    Read bytes of handshake data

    This should be called with the contents of CRYPTO frames. If it returns Ok, the caller should call write_handshake() to check if the crypto protocol has anything to send to the peer. This method will only return true the first time that handshake data is available. Future calls will always return false.

    On success, returns true iff self.handshake_data() has been populated.

    -

    fn transport_parameters(&self) -> Result<Option<TransportParameters>, Error>

    The peer’s QUIC transport parameters

    +
    Source

    fn transport_parameters(&self) -> Result<Option<TransportParameters>, Error>

    The peer’s QUIC transport parameters

    These are only available after the first flight from the peer has been received.

    -

    fn write_handshake(&mut self, buf: &mut Vec<u8>) -> Option<Keys>

    Writes handshake bytes into the given buffer and optionally returns the negotiated keys

    +
    Source

    fn write_handshake(&mut self, buf: &mut Vec<u8>) -> Option<Keys>

    Writes handshake bytes into the given buffer and optionally returns the negotiated keys

    When the handshake proceeds to the next phase, this method will return a new set of keys to encrypt data with.

    -

    fn next_1rtt_keys(&mut self) -> Option<KeyPair<Box<dyn PacketKey>>>

    Compute keys for the next key update

    -

    fn is_valid_retry( +

    Source

    fn next_1rtt_keys(&mut self) -> Option<KeyPair<Box<dyn PacketKey>>>

    Compute keys for the next key update

    +
    Source

    fn is_valid_retry( &self, orig_dst_cid: ConnectionId, header: &[u8], payload: &[u8], ) -> bool

    Verify the integrity of a retry packet

    See the specification: https://www.rfc-editor.org/rfc/rfc9001#name-retry-packet-integrity

    -

    fn export_keying_material( +

    Source

    fn export_keying_material( &self, output: &mut [u8], label: &[u8], @@ -66,4 +66,4 @@ from the Session separation.

    This function will fail, returning ExportKeyingMaterialError, if the requested output length is too large.

    -

    Implementors§

    \ No newline at end of file +

    Implementors§

    \ No newline at end of file diff --git a/pr/547/docs/noq/enum.ConfigError.html b/pr/547/docs/noq/enum.ConfigError.html index 4dee45ac1..d9577900f 100644 --- a/pr/547/docs/noq/enum.ConfigError.html +++ b/pr/547/docs/noq/enum.ConfigError.html @@ -1,9 +1,9 @@ -ConfigError in noq - Rust

    ConfigError

    Enum ConfigError 

    #[non_exhaustive]
    pub enum ConfigError { +ConfigError in noq - Rust

    ConfigError

    Enum ConfigError 

    Source
    #[non_exhaustive]
    pub enum ConfigError { OutOfBounds, }
    Expand description

    Errors in the configuration of an endpoint

    Variants (Non-exhaustive)§

    This enum is marked as non-exhaustive
    Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
    §

    OutOfBounds

    Value exceeds supported bounds

    -

    Trait Implementations§

    §

    impl Clone for ConfigError

    §

    fn clone(&self) -> ConfigError

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for ConfigError

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Display for ConfigError

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Error for ConfigError

    1.30.0 · Source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    Returns the lower-level source of this error, if any. Read more
    1.0.0 · Source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · Source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    Source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type-based access to context intended for error reports. Read more
    §

    impl From<TryFromIntError> for ConfigError

    §

    fn from(_: TryFromIntError) -> ConfigError

    Converts to this type from the input type.
    §

    impl From<VarIntBoundsExceeded> for ConfigError

    §

    fn from(_: VarIntBoundsExceeded) -> ConfigError

    Converts to this type from the input type.
    §

    impl PartialEq for ConfigError

    §

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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.
    §

    impl Eq for ConfigError

    §

    impl StructuralPartialEq for ConfigError

    Auto Trait Implementations§

    Blanket Implementations§

    Source§

    impl<T> Any for T
    where +

    Trait Implementations§

    Source§

    impl Clone for ConfigError

    Source§

    fn clone(&self) -> ConfigError

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    Source§

    impl Debug for ConfigError

    Source§

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

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

    impl Display for ConfigError

    Source§

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

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

    impl Error for ConfigError

    1.30.0 · Source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    Returns the lower-level source of this error, if any. Read more
    1.0.0 · Source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · Source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    Source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type-based access to context intended for error reports. Read more
    Source§

    impl From<TryFromIntError> for ConfigError

    Source§

    fn from(_: TryFromIntError) -> ConfigError

    Converts to this type from the input type.
    Source§

    impl From<VarIntBoundsExceeded> for ConfigError

    Source§

    fn from(_: VarIntBoundsExceeded) -> ConfigError

    Converts to this type from the input type.
    Source§

    impl PartialEq for ConfigError

    Source§

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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 ConfigError

    Source§

    impl StructuralPartialEq for ConfigError

    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 diff --git a/pr/547/docs/noq/enum.ConnectError.html b/pr/547/docs/noq/enum.ConnectError.html index ea4c8b75f..1bef64fbb 100644 --- a/pr/547/docs/noq/enum.ConnectError.html +++ b/pr/547/docs/noq/enum.ConnectError.html @@ -1,4 +1,4 @@ -ConnectError in noq - Rust

    ConnectError

    Enum ConnectError 

    pub enum ConnectError {
    +ConnectError in noq - Rust

    ConnectError

    Enum ConnectError 

    Source
    pub enum ConnectError {
         EndpointStopping,
         CidsExhausted,
         InvalidServerName(String),
    @@ -17,8 +17,8 @@
     
    §

    NoDefaultClientConfig

    No default client configuration was set up

    Use Endpoint::connect_with to specify a client configuration.

    §

    UnsupportedVersion

    The local endpoint does not support the QUIC version specified in the client configuration

    -

    Trait Implementations§

    §

    impl Clone for ConnectError

    §

    fn clone(&self) -> ConnectError

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for ConnectError

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Display for ConnectError

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Error for ConnectError

    1.30.0 · Source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    Returns the lower-level source of this error, if any. Read more
    1.0.0 · Source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · Source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    Source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type-based access to context intended for error reports. Read more
    §

    impl From<UnsupportedVersion> for ConnectError

    §

    fn from(_: UnsupportedVersion) -> ConnectError

    Converts to this type from the input type.
    §

    impl PartialEq for ConnectError

    §

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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.
    §

    impl Eq for ConnectError

    §

    impl StructuralPartialEq for ConnectError

    Auto Trait Implementations§

    Blanket Implementations§

    Source§

    impl<T> Any for T
    where +

    Trait Implementations§

    Source§

    impl Clone for ConnectError

    Source§

    fn clone(&self) -> ConnectError

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    Source§

    impl Debug for ConnectError

    Source§

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

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

    impl Display for ConnectError

    Source§

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

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

    impl Error for ConnectError

    1.30.0 · Source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    Returns the lower-level source of this error, if any. Read more
    1.0.0 · Source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · Source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    Source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type-based access to context intended for error reports. Read more
    Source§

    impl From<UnsupportedVersion> for ConnectError

    Source§

    fn from(_: UnsupportedVersion) -> ConnectError

    Converts to this type from the input type.
    Source§

    impl PartialEq for ConnectError

    Source§

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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 ConnectError

    Source§

    impl StructuralPartialEq for ConnectError

    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 diff --git a/pr/547/docs/noq/enum.ConnectionError.html b/pr/547/docs/noq/enum.ConnectionError.html index eb0f89838..b58484408 100644 --- a/pr/547/docs/noq/enum.ConnectionError.html +++ b/pr/547/docs/noq/enum.ConnectionError.html @@ -1,6 +1,6 @@ -ConnectionError in noq - Rust

    ConnectionError

    Enum ConnectionError 

    pub enum ConnectionError {
    +ConnectionError in noq - Rust

    ConnectionError

    Enum ConnectionError 

    Source
    pub enum ConnectionError {
         VersionMismatch,
    -    TransportError(Error),
    +    TransportError(Error),
         ConnectionClosed(ConnectionClose),
         ApplicationClosed(ApplicationClose),
         Reset,
    @@ -9,7 +9,7 @@
         CidsExhausted,
     }
    Expand description

    Reasons why a connection might be lost

    Variants§

    §

    VersionMismatch

    The peer doesn’t implement any supported version

    -
    §

    TransportError(Error)

    The peer violated the QUIC specification as understood by this implementation

    +
    §

    TransportError(Error)

    The peer violated the QUIC specification as understood by this implementation

    §

    ConnectionClosed(ConnectionClose)

    The peer’s QUIC stack aborted the connection automatically

    §

    ApplicationClosed(ApplicationClose)

    The peer closed the connection

    §

    Reset

    The peer is unable to continue processing this connection, usually due to having restarted

    @@ -20,8 +20,8 @@ and §

    LocallyClosed

    The local application closed the connection

    §

    CidsExhausted

    The connection could not be created because not enough of the CID space is available

    Try using longer connection IDs.

    -

    Trait Implementations§

    §

    impl Clone for ConnectionError

    §

    fn clone(&self) -> ConnectionError

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for ConnectionError

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Display for ConnectionError

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Error for ConnectionError

    §

    fn source(&self) -> Option<&(dyn Error + 'static)>

    Returns the lower-level source of this error, if any. Read more
    1.0.0 · Source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · Source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    Source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type-based access to context intended for error reports. Read more
    §

    impl From<Close> for ConnectionError

    §

    fn from(x: Close) -> ConnectionError

    Converts to this type from the input type.
    §

    impl From<CloseReason> for ConnectionError

    §

    fn from(value: CloseReason) -> ConnectionError

    Converts to this type from the input type.
    Source§

    impl From<ConnectionError> for ReadError

    Source§

    fn from(source: ConnectionError) -> Self

    Converts to this type from the input type.
    Source§

    impl From<ConnectionError> for ResetError

    Source§

    fn from(source: ConnectionError) -> Self

    Converts to this type from the input type.
    Source§

    impl From<ConnectionError> for SendDatagramError

    Source§

    fn from(source: ConnectionError) -> Self

    Converts to this type from the input type.
    Source§

    impl From<ConnectionError> for StoppedError

    Source§

    fn from(source: ConnectionError) -> Self

    Converts to this type from the input type.
    Source§

    impl From<ConnectionError> for WriteError

    Source§

    fn from(source: ConnectionError) -> Self

    Converts to this type from the input type.
    §

    impl From<Error> for ConnectionError

    §

    fn from(source: Error) -> ConnectionError

    Converts to this type from the input type.
    §

    impl PartialEq for ConnectionError

    §

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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.
    §

    impl Eq for ConnectionError

    §

    impl StructuralPartialEq for ConnectionError

    Auto Trait Implementations§

    Blanket Implementations§

    Source§

    impl<T> Any for T
    where +

    Trait Implementations§

    Source§

    impl Clone for ConnectionError

    Source§

    fn clone(&self) -> ConnectionError

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    Source§

    impl Debug for ConnectionError

    Source§

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

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

    impl Display for ConnectionError

    Source§

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

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

    impl Error for ConnectionError

    Source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    Returns the lower-level source of this error, if any. Read more
    1.0.0 · Source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · Source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    Source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type-based access to context intended for error reports. Read more
    Source§

    impl From<Close> for ConnectionError

    Source§

    fn from(x: Close) -> ConnectionError

    Converts to this type from the input type.
    Source§

    impl From<CloseReason> for ConnectionError

    Source§

    fn from(value: CloseReason) -> ConnectionError

    Converts to this type from the input type.
    Source§

    impl From<ConnectionError> for ReadError

    Source§

    fn from(source: ConnectionError) -> Self

    Converts to this type from the input type.
    Source§

    impl From<ConnectionError> for ResetError

    Source§

    fn from(source: ConnectionError) -> Self

    Converts to this type from the input type.
    Source§

    impl From<ConnectionError> for SendDatagramError

    Source§

    fn from(source: ConnectionError) -> Self

    Converts to this type from the input type.
    Source§

    impl From<ConnectionError> for StoppedError

    Source§

    fn from(source: ConnectionError) -> Self

    Converts to this type from the input type.
    Source§

    impl From<ConnectionError> for WriteError

    Source§

    fn from(source: ConnectionError) -> Self

    Converts to this type from the input type.
    Source§

    impl From<Error> for ConnectionError

    Source§

    fn from(source: Error) -> ConnectionError

    Converts to this type from the input type.
    Source§

    impl PartialEq for ConnectionError

    Source§

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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 ConnectionError

    Source§

    impl StructuralPartialEq for ConnectionError

    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 diff --git a/pr/547/docs/noq/enum.Dir.html b/pr/547/docs/noq/enum.Dir.html index accca563d..d7de578ea 100644 --- a/pr/547/docs/noq/enum.Dir.html +++ b/pr/547/docs/noq/enum.Dir.html @@ -1,25 +1,25 @@ -Dir in noq - Rust

    Dir

    Enum Dir 

    pub enum Dir {
    +Dir in noq - Rust

    Dir

    Enum Dir 

    Source
    pub enum Dir {
         Bi = 0,
         Uni = 1,
     }
    Expand description

    Whether a stream communicates data in both directions or only from the initiator

    Variants§

    §

    Bi = 0

    Data flows in both directions

    §

    Uni = 1

    Data flows only from the stream’s initiator

    -

    Trait Implementations§

    §

    impl<'arbitrary> Arbitrary<'arbitrary> for Dir

    §

    fn arbitrary(u: &mut Unstructured<'arbitrary>) -> Result<Dir, Error>

    Generate an arbitrary value of Self from the given unstructured data. Read more
    §

    fn arbitrary_take_rest(u: Unstructured<'arbitrary>) -> Result<Dir, Error>

    Generate an arbitrary value of Self from the entirety of the given -unstructured data. Read more
    §

    fn size_hint(depth: usize) -> (usize, Option<usize>)

    Get a size hint for how many bytes out of an Unstructured this type +

    Trait Implementations§

    Source§

    impl<'arbitrary> Arbitrary<'arbitrary> for Dir

    Source§

    fn arbitrary(u: &mut Unstructured<'arbitrary>) -> Result<Dir, Error>

    Generate an arbitrary value of Self from the given unstructured data. Read more
    Source§

    fn arbitrary_take_rest(u: Unstructured<'arbitrary>) -> Result<Dir, Error>

    Generate an arbitrary value of Self from the entirety of the given +unstructured data. Read more
    Source§

    fn size_hint(depth: usize) -> (usize, Option<usize>)

    Get a size hint for how many bytes out of an Unstructured this type needs to construct itself. Read more
    §

    fn try_size_hint( depth: usize, ) -> Result<(usize, Option<usize>), MaxRecursionReached>

    Get a size hint for how many bytes out of an Unstructured this type -needs to construct itself. Read more
    §

    impl Clone for Dir

    §

    fn clone(&self) -> Dir

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for Dir

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Display for Dir

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Hash for Dir

    §

    fn hash<__H>(&self, state: &mut __H)
    where +needs to construct itself. Read more

    Source§

    impl Clone for Dir

    Source§

    fn clone(&self) -> Dir

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    Source§

    impl Debug for Dir

    Source§

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

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

    impl Display for Dir

    Source§

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

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

    impl Hash for Dir

    Source§

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · Source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl Ord for Dir

    §

    fn cmp(&self, other: &Dir) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · Source§

    fn max(self, other: Self) -> Self
    where + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    Source§

    impl Ord for Dir

    Source§

    fn cmp(&self, other: &Dir) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · Source§

    fn max(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · Source§

    fn min(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · Source§

    fn clamp(self, min: Self, max: Self) -> Self
    where - Self: Sized,

    Restrict a value to a certain interval. Read more
    §

    impl PartialEq for Dir

    §

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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.
    §

    impl PartialOrd for Dir

    §

    fn partial_cmp(&self, other: &Dir) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · Source§

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

    Tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · Source§

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

    Tests less than or equal to (for self and other) and is used by the + Self: Sized,

    Restrict a value to a certain interval. Read more

    Source§

    impl PartialEq for Dir

    Source§

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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 PartialOrd for Dir

    Source§

    fn partial_cmp(&self, other: &Dir) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · Source§

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

    Tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · Source§

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

    Tests less than or equal to (for self and other) and is used by the <= operator. Read more
    1.0.0 · Source§

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

    Tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · Source§

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

    Tests greater than or equal to (for self and other) and is used by -the >= operator. Read more
    §

    impl Copy for Dir

    §

    impl Eq for Dir

    §

    impl StructuralPartialEq for Dir

    Auto Trait Implementations§

    §

    impl Freeze for Dir

    §

    impl RefUnwindSafe for Dir

    §

    impl Send for Dir

    §

    impl Sync for Dir

    §

    impl Unpin for Dir

    §

    impl UnwindSafe for Dir

    Blanket Implementations§

    Source§

    impl<T> Any for T
    where +the >= operator. Read more

    Source§

    impl Copy for Dir

    Source§

    impl Eq for Dir

    Source§

    impl StructuralPartialEq for Dir

    Auto Trait Implementations§

    §

    impl Freeze for Dir

    §

    impl RefUnwindSafe for Dir

    §

    impl Send for Dir

    §

    impl Sync for Dir

    §

    impl Unpin for Dir

    §

    impl UnwindSafe for Dir

    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 diff --git a/pr/547/docs/noq/enum.EcnCodepoint.html b/pr/547/docs/noq/enum.EcnCodepoint.html index 80d1346f4..78ed5f186 100644 --- a/pr/547/docs/noq/enum.EcnCodepoint.html +++ b/pr/547/docs/noq/enum.EcnCodepoint.html @@ -1,4 +1,4 @@ -EcnCodepoint in noq - Rust

    EcnCodepoint

    Enum EcnCodepoint 

    #[repr(u8)]
    pub enum EcnCodepoint { +EcnCodepoint in noq - Rust

    EcnCodepoint

    Enum EcnCodepoint 

    Source
    #[repr(u8)]
    pub enum EcnCodepoint { Ect0 = 2, Ect1 = 1, Ce = 3, @@ -6,10 +6,10 @@

    Variants§

    §

    Ect0 = 2

    The ECT(0) codepoint, indicating that an endpoint is ECN-capable

    §

    Ect1 = 1

    The ECT(1) codepoint, indicating that an endpoint is ECN-capable

    §

    Ce = 3

    The CE codepoint, signalling that congestion was experienced

    -

    Implementations§

    §

    impl EcnCodepoint

    pub fn from_bits(x: u8) -> Option<EcnCodepoint>

    Create new object from the given bits

    -

    pub fn is_ce(self) -> bool

    Returns whether the codepoint is a CE, signalling that congestion was experienced

    -

    Trait Implementations§

    §

    impl Clone for EcnCodepoint

    §

    fn clone(&self) -> EcnCodepoint

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for EcnCodepoint

    §

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

    Formats the value using the given formatter. Read more
    §

    impl PartialEq for EcnCodepoint

    §

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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.
    §

    impl Copy for EcnCodepoint

    §

    impl Eq for EcnCodepoint

    §

    impl StructuralPartialEq for EcnCodepoint

    Auto Trait Implementations§

    Blanket Implementations§

    Source§

    impl<T> Any for T
    where +

    Implementations§

    Source§

    impl EcnCodepoint

    Source

    pub fn from_bits(x: u8) -> Option<EcnCodepoint>

    Create new object from the given bits

    +
    Source

    pub fn is_ce(self) -> bool

    Returns whether the codepoint is a CE, signalling that congestion was experienced

    +

    Trait Implementations§

    Source§

    impl Clone for EcnCodepoint

    Source§

    fn clone(&self) -> EcnCodepoint

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    Source§

    impl Debug for EcnCodepoint

    Source§

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

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

    impl PartialEq for EcnCodepoint

    Source§

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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 Copy for EcnCodepoint

    Source§

    impl Eq for EcnCodepoint

    Source§

    impl StructuralPartialEq for EcnCodepoint

    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 diff --git a/pr/547/docs/noq/enum.FrameType.html b/pr/547/docs/noq/enum.FrameType.html index 8b88c1f95..0b1b223f9 100644 --- a/pr/547/docs/noq/enum.FrameType.html +++ b/pr/547/docs/noq/enum.FrameType.html @@ -1,4 +1,4 @@ -FrameType in noq - Rust

    FrameType

    Enum FrameType 

    pub enum FrameType {
    +FrameType in noq - Rust

    FrameType

    Enum FrameType 

    Source
    pub enum FrameType {
     
    Show 44 variants Padding, Ping, Ack, @@ -7,7 +7,7 @@ StopSending, Crypto, NewToken, - Stream(StreamInfo), + Stream(StreamInfo), MaxData, MaxStreamData, MaxStreamsBidi, @@ -25,7 +25,7 @@ HandshakeDone, AckFrequency, ImmediateAck, - Datagram(DatagramInfo), + Datagram(DatagramInfo), ObservedIpv4Addr, ObservedIpv6Addr, PathAck, @@ -43,10 +43,10 @@ ReachOutAtIpv4, ReachOutAtIpv6, RemoveAddress, -
    }

    Variants§

    §

    Padding

    §

    Ping

    §

    Ack

    §

    AckEcn

    §

    ResetStream

    §

    StopSending

    §

    Crypto

    §

    NewToken

    §

    Stream(StreamInfo)

    §

    MaxData

    §

    MaxStreamData

    §

    MaxStreamsBidi

    §

    MaxStreamsUni

    §

    DataBlocked

    §

    StreamDataBlocked

    §

    StreamsBlockedBidi

    §

    StreamsBlockedUni

    §

    NewConnectionId

    §

    RetireConnectionId

    §

    PathChallenge

    §

    PathResponse

    §

    ConnectionClose

    §

    ApplicationClose

    §

    HandshakeDone

    §

    AckFrequency

    §

    ImmediateAck

    §

    Datagram(DatagramInfo)

    §

    ObservedIpv4Addr

    §

    ObservedIpv6Addr

    §

    PathAck

    §

    PathAckEcn

    §

    PathAbandon

    §

    PathStatusBackup

    §

    PathStatusAvailable

    §

    PathNewConnectionId

    §

    PathRetireConnectionId

    §

    MaxPathId

    §

    PathsBlocked

    §

    PathCidsBlocked

    §

    AddIpv4Address

    §

    AddIpv6Address

    §

    ReachOutAtIpv4

    §

    ReachOutAtIpv6

    §

    RemoveAddress

    Trait Implementations§

    §

    impl Clone for FrameType

    §

    fn clone(&self) -> FrameType

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for FrameType

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Decodable for FrameType

    §

    fn decode<B>(buf: &mut B) -> Result<FrameType, UnexpectedEnd>
    where - B: Buf,

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

    impl Display for FrameType

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Encodable for FrameType

    §

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

    Append the encoding of self to the provided buffer.
    §

    impl PartialEq for FrameType

    §

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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.
    §

    impl TryFrom<u64> for FrameType

    §

    type Error = InvalidFrameId

    The type returned in the event of a conversion error.
    §

    fn try_from(value: u64) -> Result<FrameType, <FrameType as TryFrom<u64>>::Error>

    Performs the conversion.
    §

    impl Copy for FrameType

    §

    impl Eq for FrameType

    §

    impl StructuralPartialEq for FrameType

    Auto Trait Implementations§

    Blanket Implementations§

    Source§

    impl<T> Any for T
    where +

    }

    Variants§

    §

    Padding

    §

    Ping

    §

    Ack

    §

    AckEcn

    §

    ResetStream

    §

    StopSending

    §

    Crypto

    §

    NewToken

    §

    Stream(StreamInfo)

    §

    MaxData

    §

    MaxStreamData

    §

    MaxStreamsBidi

    §

    MaxStreamsUni

    §

    DataBlocked

    §

    StreamDataBlocked

    §

    StreamsBlockedBidi

    §

    StreamsBlockedUni

    §

    NewConnectionId

    §

    RetireConnectionId

    §

    PathChallenge

    §

    PathResponse

    §

    ConnectionClose

    §

    ApplicationClose

    §

    HandshakeDone

    §

    AckFrequency

    §

    ImmediateAck

    §

    Datagram(DatagramInfo)

    §

    ObservedIpv4Addr

    §

    ObservedIpv6Addr

    §

    PathAck

    §

    PathAckEcn

    §

    PathAbandon

    §

    PathStatusBackup

    §

    PathStatusAvailable

    §

    PathNewConnectionId

    §

    PathRetireConnectionId

    §

    MaxPathId

    §

    PathsBlocked

    §

    PathCidsBlocked

    §

    AddIpv4Address

    §

    AddIpv6Address

    §

    ReachOutAtIpv4

    §

    ReachOutAtIpv6

    §

    RemoveAddress

    Trait Implementations§

    Source§

    impl Clone for FrameType

    Source§

    fn clone(&self) -> FrameType

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    Source§

    impl Debug for FrameType

    Source§

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

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

    impl Decodable for FrameType

    Source§

    fn decode<B>(buf: &mut B) -> Result<FrameType, UnexpectedEnd>
    where + B: Buf,

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

    impl Display for FrameType

    Source§

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

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

    impl Encodable for FrameType

    Source§

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

    Append the encoding of self to the provided buffer.
    Source§

    impl PartialEq for FrameType

    Source§

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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 TryFrom<u64> for FrameType

    Source§

    type Error = InvalidFrameId

    The type returned in the event of a conversion error.
    Source§

    fn try_from(value: u64) -> Result<FrameType, <FrameType as TryFrom<u64>>::Error>

    Performs the conversion.
    Source§

    impl Copy for FrameType

    Source§

    impl Eq for FrameType

    Source§

    impl StructuralPartialEq for FrameType

    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 diff --git a/pr/547/docs/noq/enum.Side.html b/pr/547/docs/noq/enum.Side.html index 48f91ae13..b8e235db9 100644 --- a/pr/547/docs/noq/enum.Side.html +++ b/pr/547/docs/noq/enum.Side.html @@ -1,27 +1,27 @@ -Side in noq - Rust

    Side

    Enum Side 

    pub enum Side {
    +Side in noq - Rust

    Side

    Enum Side 

    Source
    pub enum Side {
         Client = 0,
         Server = 1,
     }
    Expand description

    Whether an endpoint was the initiator of a connection

    Variants§

    §

    Client = 0

    The initiator of a connection

    §

    Server = 1

    The acceptor of a connection

    -

    Implementations§

    §

    impl Side

    pub fn is_client(self) -> bool

    Shorthand for self == Side::Client

    -

    pub fn is_server(self) -> bool

    Shorthand for self == Side::Server

    -

    Trait Implementations§

    §

    impl<'arbitrary> Arbitrary<'arbitrary> for Side

    §

    fn arbitrary(u: &mut Unstructured<'arbitrary>) -> Result<Side, Error>

    Generate an arbitrary value of Self from the given unstructured data. Read more
    §

    fn arbitrary_take_rest(u: Unstructured<'arbitrary>) -> Result<Side, Error>

    Generate an arbitrary value of Self from the entirety of the given -unstructured data. Read more
    §

    fn size_hint(depth: usize) -> (usize, Option<usize>)

    Get a size hint for how many bytes out of an Unstructured this type +

    Implementations§

    Source§

    impl Side

    Source

    pub fn is_client(self) -> bool

    Shorthand for self == Side::Client

    +
    Source

    pub fn is_server(self) -> bool

    Shorthand for self == Side::Server

    +

    Trait Implementations§

    Source§

    impl<'arbitrary> Arbitrary<'arbitrary> for Side

    Source§

    fn arbitrary(u: &mut Unstructured<'arbitrary>) -> Result<Side, Error>

    Generate an arbitrary value of Self from the given unstructured data. Read more
    Source§

    fn arbitrary_take_rest(u: Unstructured<'arbitrary>) -> Result<Side, Error>

    Generate an arbitrary value of Self from the entirety of the given +unstructured data. Read more
    Source§

    fn size_hint(depth: usize) -> (usize, Option<usize>)

    Get a size hint for how many bytes out of an Unstructured this type needs to construct itself. Read more
    §

    fn try_size_hint( depth: usize, ) -> Result<(usize, Option<usize>), MaxRecursionReached>

    Get a size hint for how many bytes out of an Unstructured this type -needs to construct itself. Read more
    §

    impl Clone for Side

    §

    fn clone(&self) -> Side

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for Side

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Hash for Side

    §

    fn hash<__H>(&self, state: &mut __H)
    where +needs to construct itself. Read more

    Source§

    impl Clone for Side

    Source§

    fn clone(&self) -> Side

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    Source§

    impl Debug for Side

    Source§

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

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

    impl Hash for Side

    Source§

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · Source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl Not for Side

    §

    type Output = Side

    The resulting type after applying the ! operator.
    §

    fn not(self) -> Side

    Performs the unary ! operation. Read more
    §

    impl Ord for Side

    §

    fn cmp(&self, other: &Side) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · Source§

    fn max(self, other: Self) -> Self
    where + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    Source§

    impl Not for Side

    Source§

    type Output = Side

    The resulting type after applying the ! operator.
    Source§

    fn not(self) -> Side

    Performs the unary ! operation. Read more
    Source§

    impl Ord for Side

    Source§

    fn cmp(&self, other: &Side) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · Source§

    fn max(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · Source§

    fn min(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · Source§

    fn clamp(self, min: Self, max: Self) -> Self
    where - Self: Sized,

    Restrict a value to a certain interval. Read more
    §

    impl PartialEq for Side

    §

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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.
    §

    impl PartialOrd for Side

    §

    fn partial_cmp(&self, other: &Side) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · Source§

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

    Tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · Source§

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

    Tests less than or equal to (for self and other) and is used by the + Self: Sized,

    Restrict a value to a certain interval. Read more

    Source§

    impl PartialEq for Side

    Source§

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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 PartialOrd for Side

    Source§

    fn partial_cmp(&self, other: &Side) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · Source§

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

    Tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · Source§

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

    Tests less than or equal to (for self and other) and is used by the <= operator. Read more
    1.0.0 · Source§

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

    Tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · Source§

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

    Tests greater than or equal to (for self and other) and is used by -the >= operator. Read more
    §

    impl Copy for Side

    §

    impl Eq for Side

    §

    impl StructuralPartialEq for Side

    Auto Trait Implementations§

    §

    impl Freeze for Side

    §

    impl RefUnwindSafe for Side

    §

    impl Send for Side

    §

    impl Sync for Side

    §

    impl Unpin for Side

    §

    impl UnwindSafe for Side

    Blanket Implementations§

    Source§

    impl<T> Any for T
    where +the >= operator. Read more

    Source§

    impl Copy for Side

    Source§

    impl Eq for Side

    Source§

    impl StructuralPartialEq for Side

    Auto Trait Implementations§

    §

    impl Freeze for Side

    §

    impl RefUnwindSafe for Side

    §

    impl Send for Side

    §

    impl Sync for Side

    §

    impl Unpin for Side

    §

    impl UnwindSafe for Side

    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 diff --git a/pr/547/docs/noq/index.html b/pr/547/docs/noq/index.html index a30817f3b..5554daa1f 100644 --- a/pr/547/docs/noq/index.html +++ b/pr/547/docs/noq/index.html @@ -29,7 +29,6 @@ server, it is useful for a QUIC server to be identified by a certificate signed authority. If this is infeasible–for example, if servers are short-lived or not associated with a domain name–then as with TLS, self-signed certificates can be used to provide encryption alone.

    -

    Re-exports§

    pub use rustls;
    pub use udp;

    Modules§

    congestion
    Logic for controlling the rate at which data is sent
    crypto
    Traits and implementations for the QUIC cryptography protocol

    Structs§

    Accept
    Future produced by Endpoint::accept
    AcceptBi
    Future produced by Connection::accept_bi
    AcceptUni
    Future produced by Connection::accept_uni
    AckFrequencyConfig
    Parameters for controlling the peer’s acknowledgement frequency
    AddressDiscovery
    Stream produced by Path::observed_external_addr
    ApplicationClose
    Reason given by an application for closing the connection
    BloomTokenLog
    Bloom filter-based TokenLog
    Chunk
    A chunk of data from the receive stream
    ClientConfig
    Configuration for outgoing connections
    ClosedStream
    Error indicating that a stream has not been opened or has already been finished or reset
    Connecting
    In-progress connection attempt future
    Connection
    A QUIC connection.
    ConnectionClose
    Reason given by the transport for closing the connection
    ConnectionId
    Protocol-level identifier for a connection.
    ConnectionStats
    Connection statistics.
    Endpoint
    A QUIC endpoint.
    EndpointConfig
    Global configuration for the endpoint, affecting all connections
    EndpointStats
    Statistics on Endpoint activity
    FrameStats
    Number of frames transmitted or received of each frame type.
    IdleTimeout
    Maximum duration of inactivity to accept before timing out the connection
    Incoming
    An incoming connection for which the server has not yet begun its part of the handshake
    IncomingFuture
    Basic adapter to let Incoming be await-ed like a Connecting
    InvalidCid
    The connection ID was not recognized by the ConnectionIdGenerator
    Lagged
    The receiver lagged too far behind. Attempting to receive again will -return the oldest message still retained by the channel.
    MtuDiscoveryConfig
    Parameters governing MTU discovery.
    NatTraversalUpdates
    A stream of NAT traversal updates for a connection.
    NoneTokenLog
    Null implementation of TokenLog, which never accepts tokens
    NoneTokenStore
    Null implementation of TokenStore, which does not store any tokens
    ObservedExternalAddr
    Watches the external address reported by the peer for this connection.
    OnClosed
    Future returned by Connection::on_closed
    OpenBi
    Future produced by Connection::open_bi
    OpenPath
    Future produced by crate::Connection::open_path
    OpenUni
    Future produced by Connection::open_uni
    Path
    An open network transmission within a multipath-enabled connection.
    PathEvents
    A stream of [PathEvent]s for all paths in a connection.
    PathId
    Id representing different paths when using multipath extension
    PathStats
    Statistics related to a transmission path.
    QlogConfig
    Configuration for qlog trace logging.
    QlogFileFactory
    Enables writing qlog traces to a directory.
    ReadDatagram
    Future produced by Connection::read_datagram
    RecvStream
    A stream that can only be used to receive data
    RetryError
    Error for attempting to retry an Incoming which already bears a token from a previous retry
    SendDatagram
    Future produced by Connection::send_datagram_wait
    SendStream
    A stream that can only be used to send data
    ServerConfig
    Parameters governing incoming connections
    SmolRuntime
    A noq runtime for smol
    StdSystemTime
    Default implementation of TimeSource
    Stopped
    Future returned from SendStream::stopped.
    StreamId
    Identifier for a stream within a particular connection
    TokenMemoryCache
    TokenStore implementation that stores up to N tokens per server name for up to a +

    Re-exports§

    pub use rustls;
    pub use udp;

    Modules§

    congestion
    Logic for controlling the rate at which data is sent
    crypto
    Traits and implementations for the QUIC cryptography protocol

    Structs§

    Accept
    Future produced by Endpoint::accept
    AcceptBi
    Future produced by Connection::accept_bi
    AcceptUni
    Future produced by Connection::accept_uni
    AckFrequencyConfig
    Parameters for controlling the peer’s acknowledgement frequency
    AddressDiscovery
    Stream produced by Path::observed_external_addr
    ApplicationClose
    Reason given by an application for closing the connection
    BloomTokenLog
    Bloom filter-based TokenLog
    Chunk
    A chunk of data from the receive stream
    ClientConfig
    Configuration for outgoing connections
    ClosedStream
    Error indicating that a stream has not been opened or has already been finished or reset
    Connecting
    In-progress connection attempt future
    Connection
    A QUIC connection.
    ConnectionClose
    Reason given by the transport for closing the connection
    ConnectionId
    Protocol-level identifier for a connection.
    ConnectionStats
    Connection statistics.
    Endpoint
    A QUIC endpoint.
    EndpointConfig
    Global configuration for the endpoint, affecting all connections
    EndpointStats
    Statistics on Endpoint activity
    FrameStats
    Number of frames transmitted or received of each frame type.
    IdleTimeout
    Maximum duration of inactivity to accept before timing out the connection
    Incoming
    An incoming connection for which the server has not yet begun its part of the handshake
    IncomingFuture
    Basic adapter to let Incoming be await-ed like a Connecting
    InvalidCid
    The connection ID was not recognized by the ConnectionIdGenerator
    Lagged
    The receiver lagged too far behind.
    MtuDiscoveryConfig
    Parameters governing MTU discovery.
    NatTraversalUpdates
    A stream of NAT traversal updates for a connection.
    NoneTokenLog
    Null implementation of TokenLog, which never accepts tokens
    NoneTokenStore
    Null implementation of TokenStore, which does not store any tokens
    ObservedExternalAddr
    Watches the external address reported by the peer for this connection.
    OnClosed
    Future returned by Connection::on_closed
    OpenBi
    Future produced by Connection::open_bi
    OpenPath
    Future produced by crate::Connection::open_path
    OpenUni
    Future produced by Connection::open_uni
    Path
    An open network transmission within a multipath-enabled connection.
    PathEvents
    A stream of PathEvents for all paths in a connection.
    PathId
    Id representing different paths when using multipath extension
    PathStats
    Statistics related to a transmission path.
    QlogConfig
    Configuration for qlog trace logging.
    QlogFileFactory
    Enables writing qlog traces to a directory.
    ReadDatagram
    Future produced by Connection::read_datagram
    RecvStream
    A stream that can only be used to receive data
    RetryError
    Error for attempting to retry an Incoming which already bears a token from a previous retry
    SendDatagram
    Future produced by Connection::send_datagram_wait
    SendStream
    A stream that can only be used to send data
    ServerConfig
    Parameters governing incoming connections
    SmolRuntime
    A noq runtime for smol
    StdSystemTime
    Default implementation of TimeSource
    Stopped
    Future returned from SendStream::stopped.
    StreamId
    Identifier for a stream within a particular connection
    TokenMemoryCache
    TokenStore implementation that stores up to N tokens per server name for up to a limited number of server names, in-memory
    TokenReuseError
    Error for when a validation token may have been reused
    TokioRuntime
    A noq runtime for Tokio
    Transmit
    An outgoing packet
    TransportConfig
    Parameters governing the core QUIC state machine
    TransportErrorCode
    Transport-level error code
    UdpStats
    Statistics about UDP datagrams transmitted or received on a connection.
    UnorderedRecvStream
    A stream that can be used to receive data out-of-order.
    ValidationTokenConfig
    Configuration for sending and handling validation tokens in incoming connections
    VarInt
    An integer less than 2^62
    VarIntBoundsExceeded
    Error returned when constructing a VarInt from a value >= 2^62
    WeakConnectionHandle
    A handle to some connection internals, use with care.
    WeakPathHandle
    Weak handle for a Path that does not keep the connection alive.
    Written
    Indicates how many bytes and chunks had been transferred in a write operation
    ZeroRttAccepted
    Future that completes when a connection is fully established

    Enums§

    ConfigError
    Errors in the configuration of an endpoint
    ConnectError
    Errors in the parameters being used to create a new connection
    ConnectionError
    Reasons why a connection might be lost
    Dir
    Whether a stream communicates data in both directions or only from the initiator
    EcnCodepoint
    Explicit congestion notification codepoint
    FrameType
    ReadError
    Errors that arise from reading from a stream.
    ReadExactError
    Errors that arise from reading from a stream.
    ReadToEndError
    Errors from RecvStream::read_to_end
    ResetError
    Errors that arise while waiting for a stream to be reset
    SendDatagramError
    Errors that can arise when sending a datagram
    Side
    Whether an endpoint was the initiator of a connection
    StoppedError
    Errors that arise while monitoring for a send stream stop from the peer
    WriteError
    Errors that arise from writing to a stream

    Traits§

    AsyncTimer
    Abstract implementation of an async timer for runtime independence
    AsyncUdpSocket
    Abstract implementation of a UDP socket for runtime independence
    ConnectionIdGenerator
    Generates connection IDs for incoming connections
    NetworkChangeHint
    Hints when the caller identifies a network change.
    QlogFactory
    Constructs a QlogConfig for individual connections.
    Runtime
    Abstracts I/O and timer operations for runtime independence
    TimeSource
    Object to get current SystemTime
    TokenLog
    Responsible for limiting clients’ ability to reuse validation tokens
    TokenStore
    Responsible for storing validation tokens received from servers and retrieving them for use in subsequent connections
    UdpSender
    An object for asynchronously writing to an associated AsyncUdpSocket.

    Functions§

    default_runtime
    Automatically select an appropriate runtime from those enabled at compile time
    \ No newline at end of file diff --git a/pr/547/docs/noq/struct.AckFrequencyConfig.html b/pr/547/docs/noq/struct.AckFrequencyConfig.html index 0713c9549..846cbe3af 100644 --- a/pr/547/docs/noq/struct.AckFrequencyConfig.html +++ b/pr/547/docs/noq/struct.AckFrequencyConfig.html @@ -1,4 +1,4 @@ -AckFrequencyConfig in noq - Rust

    AckFrequencyConfig

    Struct AckFrequencyConfig 

    pub struct AckFrequencyConfig { /* private fields */ }
    Expand description

    Parameters for controlling the peer’s acknowledgement frequency

    +AckFrequencyConfig in noq - Rust

    AckFrequencyConfig

    Struct AckFrequencyConfig 

    Source
    pub struct AckFrequencyConfig { /* private fields */ }
    Expand description

    Parameters for controlling the peer’s acknowledgement frequency

    The parameters provided in this config will be sent to the peer at the beginning of the connection, so it can take them into account when sending acknowledgements (see each parameter’s description for details on how it influences acknowledgement frequency).

    @@ -7,7 +7,7 @@ description for details on how it influences acknowledgement frequency).

    The defaults produce behavior slightly different than the behavior without this extension, because they change the way reordered packets are handled (see AckFrequencyConfig::reordering_threshold for details).

    -

    Implementations§

    §

    impl AckFrequencyConfig

    Implementations§

    Source§

    impl AckFrequencyConfig

    Source

    pub fn ack_eliciting_threshold( &mut self, value: VarInt, ) -> &mut AckFrequencyConfig

    The ack-eliciting threshold we will request the peer to use

    @@ -17,7 +17,7 @@ without immediately sending an ACK.

    ack-eliciting packets have been received. A value of 0 results in a receiver immediately acknowledging every ack-eliciting packet.

    Defaults to 1, which sends ACK frames for every other ack-eliciting packet.

    -

    pub fn max_ack_delay( +

    Source

    pub fn max_ack_delay( &mut self, value: Option<Duration>, ) -> &mut AckFrequencyConfig

    The max_ack_delay we will request the peer to use

    @@ -27,7 +27,7 @@ an ACK when the ack-eliciting threshold hasn’t been reached.

    transport parameter, and at most the greater of the current path RTT or 25ms.

    Defaults to None, in which case the peer’s original max_ack_delay will be used, as obtained from its transport parameters.

    -

    pub fn reordering_threshold(&mut self, value: VarInt) -> &mut AckFrequencyConfig

    The reordering threshold we will request the peer to use

    +
    Source

    pub fn reordering_threshold(&mut self, value: VarInt) -> &mut AckFrequencyConfig

    The reordering threshold we will request the peer to use

    This threshold represents the amount of out-of-order packets that will trigger an endpoint to send an ACK, without waiting for ack_eliciting_threshold to be exceeded or for max_ack_delay to be elapsed.

    @@ -37,7 +37,7 @@ behavior when the extension is disabled).

    It is recommended to set this value to TransportConfig::packet_threshold minus one. Since the default value for TransportConfig::packet_threshold is 3, this value defaults to 2.

    -

    Trait Implementations§

    §

    impl Clone for AckFrequencyConfig

    §

    fn clone(&self) -> AckFrequencyConfig

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for AckFrequencyConfig

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Default for AckFrequencyConfig

    §

    fn default() -> AckFrequencyConfig

    Returns the “default value” for a type. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    Source§

    impl<T> Any for T
    where +

    Trait Implementations§

    Source§

    impl Clone for AckFrequencyConfig

    Source§

    fn clone(&self) -> AckFrequencyConfig

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    Source§

    impl Debug for AckFrequencyConfig

    Source§

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

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

    impl Default for AckFrequencyConfig

    Source§

    fn default() -> AckFrequencyConfig

    Returns the “default value” for a type. Read more

    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 diff --git a/pr/547/docs/noq/struct.ApplicationClose.html b/pr/547/docs/noq/struct.ApplicationClose.html index f0e90fca1..f221a3f42 100644 --- a/pr/547/docs/noq/struct.ApplicationClose.html +++ b/pr/547/docs/noq/struct.ApplicationClose.html @@ -1,11 +1,11 @@ -ApplicationClose in noq - Rust

    ApplicationClose

    Struct ApplicationClose 

    pub struct ApplicationClose {
    +ApplicationClose in noq - Rust

    ApplicationClose

    Struct ApplicationClose 

    Source
    pub struct ApplicationClose {
         pub error_code: VarInt,
         pub reason: Bytes,
     }
    Expand description

    Reason given by an application for closing the connection

    Fields§

    §error_code: VarInt

    Application-specific reason code

    §reason: Bytes

    Human-readable reason for the close

    -

    Trait Implementations§

    §

    impl Clone for ApplicationClose

    §

    fn clone(&self) -> ApplicationClose

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for ApplicationClose

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Display for ApplicationClose

    §

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

    Formats the value using the given formatter. Read more
    §

    impl PartialEq for ApplicationClose

    §

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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.
    §

    impl Eq for ApplicationClose

    §

    impl StructuralPartialEq for ApplicationClose

    Auto Trait Implementations§

    Blanket Implementations§

    Source§

    impl<T> Any for T
    where +

    Trait Implementations§

    Source§

    impl Clone for ApplicationClose

    Source§

    fn clone(&self) -> ApplicationClose

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    Source§

    impl Debug for ApplicationClose

    Source§

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

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

    impl Display for ApplicationClose

    Source§

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

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

    impl PartialEq for ApplicationClose

    Source§

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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 ApplicationClose

    Source§

    impl StructuralPartialEq for ApplicationClose

    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 diff --git a/pr/547/docs/noq/struct.BloomTokenLog.html b/pr/547/docs/noq/struct.BloomTokenLog.html index fe04f6a68..b71a39ab7 100644 --- a/pr/547/docs/noq/struct.BloomTokenLog.html +++ b/pr/547/docs/noq/struct.BloomTokenLog.html @@ -1,4 +1,4 @@ -BloomTokenLog in noq - Rust

    BloomTokenLog

    Struct BloomTokenLog 

    pub struct BloomTokenLog(/* private fields */);
    Expand description

    Bloom filter-based TokenLog

    +BloomTokenLog in noq - Rust

    BloomTokenLog

    Struct BloomTokenLog 

    Source
    pub struct BloomTokenLog(/* private fields */);
    Expand description

    Bloom filter-based TokenLog

    Parameterizable over an approximate maximum number of bytes to allocate. Starts out by storing used tokens in a hash set. Once the hash set becomes too large, converts it to a bloom filter. This achieves a memory profile of linear growth with an upper bound.

    @@ -6,17 +6,17 @@ This achieves a memory profile of linear growth with an upper bound.

    each of the two periods currently non-expired tokens could expire in. As such, turns over filters as time goes on to avoid bloom filter false positive rate increasing infinitely over time.

    -

    Implementations§

    §

    impl BloomTokenLog

    pub fn new_expected_items(max_bytes: usize, expected_hits: u64) -> BloomTokenLog

    Construct with an approximate maximum memory usage and expected number of validation token +

    Implementations§

    Source§

    impl BloomTokenLog

    Source

    pub fn new_expected_items(max_bytes: usize, expected_hits: u64) -> BloomTokenLog

    Construct with an approximate maximum memory usage and expected number of validation token usages per expiration period

    Calculates the optimal bloom filter k number automatically.

    -

    pub fn new(max_bytes: usize, k_num: u32) -> BloomTokenLog

    Construct with an approximate maximum memory usage and a bloom filter k number

    +
    Source

    pub fn new(max_bytes: usize, k_num: u32) -> BloomTokenLog

    Construct with an approximate maximum memory usage and a bloom filter k number

    If choosing a custom k number, note that BloomTokenLog always maintains two filters between them and divides the allocation budget of max_bytes evenly between them. As such, each bloom filter will contain max_bytes * 4 bits.

    -

    Trait Implementations§

    §

    impl Default for BloomTokenLog

    Default to 20 MiB max memory consumption and expected one million hits

    +

    Trait Implementations§

    Source§

    impl Default for BloomTokenLog

    Default to 20 MiB max memory consumption and expected one million hits

    With the default validation token lifetime of 2 weeks, this corresponds to one token usage per 1.21 seconds.

    -
    §

    fn default() -> BloomTokenLog

    Returns the “default value” for a type. Read more
    §

    impl TokenLog for BloomTokenLog

    Source§

    fn default() -> BloomTokenLog

    Returns the “default value” for a type. Read more
    Source§

    impl TokenLog for BloomTokenLog

    Source§

    fn check_and_insert( &self, nonce: u128, issued: SystemTime, diff --git a/pr/547/docs/noq/struct.Chunk.html b/pr/547/docs/noq/struct.Chunk.html index 7fa5d18ec..84aae8417 100644 --- a/pr/547/docs/noq/struct.Chunk.html +++ b/pr/547/docs/noq/struct.Chunk.html @@ -1,11 +1,11 @@ -Chunk in noq - Rust

    Chunk

    Struct Chunk 

    pub struct Chunk {
    +Chunk in noq - Rust

    Chunk

    Struct Chunk 

    Source
    pub struct Chunk {
         pub offset: u64,
         pub bytes: Bytes,
     }
    Expand description

    A chunk of data from the receive stream

    Fields§

    §offset: u64

    The offset in the stream

    §bytes: Bytes

    The contents of the chunk

    -

    Trait Implementations§

    §

    impl Debug for Chunk

    §

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

    Formats the value using the given formatter. Read more
    §

    impl PartialEq for Chunk

    §

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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.
    §

    impl Eq for Chunk

    §

    impl StructuralPartialEq for Chunk

    Auto Trait Implementations§

    §

    impl !Freeze for Chunk

    §

    impl RefUnwindSafe for Chunk

    §

    impl Send for Chunk

    §

    impl Sync for Chunk

    §

    impl Unpin for Chunk

    §

    impl UnwindSafe for Chunk

    Blanket Implementations§

    Source§

    impl<T> Any for T
    where +

    Trait Implementations§

    Source§

    impl Debug for Chunk

    Source§

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

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

    impl PartialEq for Chunk

    Source§

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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 Chunk

    Source§

    impl StructuralPartialEq for Chunk

    Auto Trait Implementations§

    §

    impl !Freeze for Chunk

    §

    impl RefUnwindSafe for Chunk

    §

    impl Send for Chunk

    §

    impl Sync for Chunk

    §

    impl Unpin for Chunk

    §

    impl UnwindSafe for Chunk

    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
    §

    impl<Q, K> Equivalent<K> for Q
    where diff --git a/pr/547/docs/noq/struct.ClientConfig.html b/pr/547/docs/noq/struct.ClientConfig.html index 6f3881dee..7692a2bb1 100644 --- a/pr/547/docs/noq/struct.ClientConfig.html +++ b/pr/547/docs/noq/struct.ClientConfig.html @@ -1,7 +1,7 @@ -ClientConfig in noq - Rust

    ClientConfig

    Struct ClientConfig 

    #[non_exhaustive]
    pub struct ClientConfig { /* private fields */ }
    Expand description

    Configuration for outgoing connections

    +ClientConfig in noq - Rust

    ClientConfig

    Struct ClientConfig 

    Source
    #[non_exhaustive]
    pub struct ClientConfig { /* private fields */ }
    Expand description

    Configuration for outgoing connections

    Default values should be suitable for most internet applications.

    -

    Implementations§

    §

    impl ClientConfig

    pub fn new(crypto: Arc<dyn ClientConfig>) -> ClientConfig

    Create a default config with a particular cryptographic config

    -

    pub fn initial_dst_cid_provider( +

    Implementations§

    Source§

    impl ClientConfig

    Source

    pub fn new(crypto: Arc<dyn ClientConfig>) -> ClientConfig

    Create a default config with a particular cryptographic config

    +
    Source

    pub fn initial_dst_cid_provider( &mut self, initial_dst_cid_provider: Arc<dyn Fn() -> ConnectionId + Send + Sync>, ) -> &mut ClientConfig

    Configure how to populate the destination CID of the initial packet when attempting to @@ -10,18 +10,18 @@ establish a new connection

    a good reason, you do not need to change it.

    When prefer to override the default, please note that the generated connection ID MUST be at least 8 bytes long and unpredictable, as per section 7.2 of RFC 9000.

    -

    pub fn transport_config( +

    Source

    pub fn transport_config( &mut self, transport: Arc<TransportConfig>, ) -> &mut ClientConfig

    Set a custom TransportConfig

    -

    pub fn token_store(&mut self, store: Arc<dyn TokenStore>) -> &mut ClientConfig

    Set a custom TokenStore

    +
    Source

    pub fn token_store(&mut self, store: Arc<dyn TokenStore>) -> &mut ClientConfig

    Set a custom TokenStore

    Defaults to TokenMemoryCache, which is suitable for most internet applications.

    -

    pub fn version(&mut self, version: u32) -> &mut ClientConfig

    Set the QUIC version to use

    -
    §

    impl ClientConfig

    pub fn try_with_platform_verifier() -> Result<ClientConfig, Error>

    Create a client configuration that trusts the platform’s native roots

    -

    pub fn with_root_certificates( +

    Source

    pub fn version(&mut self, version: u32) -> &mut ClientConfig

    Set the QUIC version to use

    +

    Source§

    impl ClientConfig

    Source

    pub fn try_with_platform_verifier() -> Result<ClientConfig, Error>

    Create a client configuration that trusts the platform’s native roots

    +
    Source

    pub fn with_root_certificates( roots: Arc<RootCertStore>, ) -> Result<ClientConfig, VerifierBuilderError>

    Create a client configuration that trusts specified trust anchors

    -

    Trait Implementations§

    §

    impl Clone for ClientConfig

    §

    fn clone(&self) -> ClientConfig

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for ClientConfig

    §

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

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    Source§

    impl<T> Any for T
    where +

    Trait Implementations§

    Source§

    impl Clone for ClientConfig

    Source§

    fn clone(&self) -> ClientConfig

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    Source§

    impl Debug for ClientConfig

    Source§

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

    Formats the value using the given formatter. Read more

    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 diff --git a/pr/547/docs/noq/struct.ClosedStream.html b/pr/547/docs/noq/struct.ClosedStream.html index ce125296f..8eb864ca2 100644 --- a/pr/547/docs/noq/struct.ClosedStream.html +++ b/pr/547/docs/noq/struct.ClosedStream.html @@ -1,6 +1,6 @@ -ClosedStream in noq - Rust

    ClosedStream

    Struct ClosedStream 

    pub struct ClosedStream { /* private fields */ }
    Expand description

    Error indicating that a stream has not been opened or has already been finished or reset

    -

    Trait Implementations§

    §

    impl Clone for ClosedStream

    §

    fn clone(&self) -> ClosedStream

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for ClosedStream

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Default for ClosedStream

    §

    fn default() -> ClosedStream

    Returns the “default value” for a type. Read more
    §

    impl Display for ClosedStream

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Error for ClosedStream

    1.30.0 · Source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    Returns the lower-level source of this error, if any. Read more
    1.0.0 · Source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · Source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    Source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type-based access to context intended for error reports. Read more
    Source§

    impl From<ClosedStream> for WriteError

    Source§

    fn from(_: ClosedStream) -> Self

    Converts to this type from the input type.
    §

    impl PartialEq for ClosedStream

    §

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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.
    §

    impl Eq for ClosedStream

    §

    impl StructuralPartialEq for ClosedStream

    Auto Trait Implementations§

    Blanket Implementations§

    Source§

    impl<T> Any for T
    where +ClosedStream in noq - Rust

    ClosedStream

    Struct ClosedStream 

    Source
    pub struct ClosedStream { /* private fields */ }
    Expand description

    Error indicating that a stream has not been opened or has already been finished or reset

    +

    Trait Implementations§

    Source§

    impl Clone for ClosedStream

    Source§

    fn clone(&self) -> ClosedStream

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    Source§

    impl Debug for ClosedStream

    Source§

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

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

    impl Default for ClosedStream

    Source§

    fn default() -> ClosedStream

    Returns the “default value” for a type. Read more
    Source§

    impl Display for ClosedStream

    Source§

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

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

    impl Error for ClosedStream

    1.30.0 · Source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    Returns the lower-level source of this error, if any. Read more
    1.0.0 · Source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · Source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    Source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type-based access to context intended for error reports. Read more
    Source§

    impl From<ClosedStream> for WriteError

    Source§

    fn from(_: ClosedStream) -> Self

    Converts to this type from the input type.
    Source§

    impl PartialEq for ClosedStream

    Source§

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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 ClosedStream

    Source§

    impl StructuralPartialEq for ClosedStream

    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 diff --git a/pr/547/docs/noq/struct.Connection.html b/pr/547/docs/noq/struct.Connection.html index aea8da129..6c93a1c6d 100644 --- a/pr/547/docs/noq/struct.Connection.html +++ b/pr/547/docs/noq/struct.Connection.html @@ -27,26 +27,26 @@ waiting on the <

    Source

    pub fn open_path_ensure( &self, addr: SocketAddr, - initial_status: PathStatus, + initial_status: PathStatus, ) -> OpenPath

    Opens a new path if no path exists yet for the remote address.

    Otherwise behaves exactly as open_path.

    Source

    pub fn open_path( &self, addr: SocketAddr, - initial_status: PathStatus, + initial_status: PathStatus, ) -> OpenPath

    Opens an additional path if the multipath extension is negotiated.

    The returned future completes once the path is either fully opened and ready to carry application data, or if there was an error.

    Dropping the returned future does not cancel the opening of the path, the -[PathEvent::Opened] event will still be emitted from Self::path_events if the +PathEvent::Opened event will still be emitted from Self::path_events if the path opens. The PathId for the events can be extracted from OpenPath::path_id.

    Failure to open a path can either occur immediately, before polling the returned future, or at a later time. If the failure is immediate OpenPath::path_id will return None and the future will be ready immediately. If the failure happens -later, a [PathEvent] will be emitted.

    +later, a PathEvent will be emitted.

    Source

    pub fn path(&self, id: PathId) -> Option<Path>

    Returns the Path structure of an open path

    -
    Source

    pub fn path_events(&self) -> PathEvents

    A stream of [PathEvent]s for all paths in this connection.

    +
    Source

    pub fn path_events(&self) -> PathEvents

    A stream of PathEvents for all paths in this connection.

    Source

    pub fn nat_traversal_updates(&self) -> NatTraversalUpdates

    A stream of NAT traversal updates for this connection.

    Source

    pub async fn closed(&self) -> ConnectionError

    Wait for the connection to be closed for any reason

    Despite the return type’s name, closed connections are often not an error condition at the @@ -163,7 +163,7 @@ strong and pseudorandom, and are suitable for use as keying material.

    Source

    pub fn add_nat_traversal_address( &self, address: SocketAddr, -) -> Result<(), Error>

    Registers one address at which this endpoint might be reachable

    +) -> Result<(), Error>

    Registers one address at which this endpoint might be reachable

    When the NAT traversal extension is negotiated, servers send these addresses to clients in ADD_ADDRESS frames. This allows clients to obtain server address candidates to initiate NAT traversal attempts. Clients provide their own reachable addresses in REACH_OUT frames @@ -171,7 +171,7 @@ when

    Source

    pub fn remove_nat_traversal_address( &self, address: SocketAddr, -) -> Result<(), Error>

    Removes one or more addresses from the set of addresses at which this endpoint is reachable

    +) -> Result<(), Error>

    Removes one or more addresses from the set of addresses at which this endpoint is reachable

    When the NAT traversal extension is negotiated, servers send address removals to clients in REMOVE_ADDRESS frames. This allows clients to stop using outdated server address candidates that are no longer valid for NAT traversal.

    @@ -179,11 +179,11 @@ server address candidates that are no longer valid for NAT traversal.

    Addresses not present in the set will be silently ignored.

    Source

    pub fn get_local_nat_traversal_addresses( &self, -) -> Result<Vec<SocketAddr>, Error>

    Get the current local nat traversal addresses

    +) -> Result<Vec<SocketAddr>, Error>

    Get the current local nat traversal addresses

    Source

    pub fn get_remote_nat_traversal_addresses( &self, -) -> Result<Vec<SocketAddr>, Error>

    Get the currently advertised nat traversal addresses by the server

    -
    Source

    pub fn initiate_nat_traversal_round(&self) -> Result<Vec<SocketAddr>, Error>

    Initiates a new nat traversal round

    +) -> Result<Vec<SocketAddr>, Error>

    Get the currently advertised nat traversal addresses by the server

    +
    Source

    pub fn initiate_nat_traversal_round(&self) -> Result<Vec<SocketAddr>, Error>

    Initiates a new nat traversal round

    A nat traversal round involves advertising the client’s local addresses in REACH_OUT frames, and initiating probing of the known remote addresses. When a new round is initiated, the previous one is cancelled, and paths that have not been opened are closed.

    @@ -212,4 +212,4 @@ otherwise. 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.
    §

    impl<T> WithSubscriber for T

    §

    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
    §

    fn with_current_subscriber(self) -> WithDispatch<Self>

    Attaches the current default Subscriber to this type, returning a -[WithDispatch] wrapper. Read more
    \ No newline at end of file +[WithDispatch] wrapper. Read more \ No newline at end of file diff --git a/pr/547/docs/noq/struct.ConnectionClose.html b/pr/547/docs/noq/struct.ConnectionClose.html index a1f3a469e..d66b8be4b 100644 --- a/pr/547/docs/noq/struct.ConnectionClose.html +++ b/pr/547/docs/noq/struct.ConnectionClose.html @@ -1,13 +1,13 @@ -ConnectionClose in noq - Rust

    ConnectionClose

    Struct ConnectionClose 

    pub struct ConnectionClose {
    +ConnectionClose in noq - Rust

    ConnectionClose

    Struct ConnectionClose 

    Source
    pub struct ConnectionClose {
         pub error_code: Code,
    -    pub frame_type: MaybeFrame,
    +    pub frame_type: MaybeFrame,
         pub reason: Bytes,
     }
    Expand description

    Reason given by the transport for closing the connection

    Fields§

    §error_code: Code

    Class of error as encoded in the specification

    -
    §frame_type: MaybeFrame

    Type of frame that caused the close

    +
    §frame_type: MaybeFrame

    Type of frame that caused the close

    §reason: Bytes

    Human-readable reason for the close

    -

    Trait Implementations§

    §

    impl Clone for ConnectionClose

    §

    fn clone(&self) -> ConnectionClose

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for ConnectionClose

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Display for ConnectionClose

    §

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

    Formats the value using the given formatter. Read more
    §

    impl From<Error> for ConnectionClose

    §

    fn from(x: Error) -> ConnectionClose

    Converts to this type from the input type.
    §

    impl PartialEq for ConnectionClose

    §

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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.
    §

    impl Eq for ConnectionClose

    §

    impl StructuralPartialEq for ConnectionClose

    Auto Trait Implementations§

    Blanket Implementations§

    Source§

    impl<T> Any for T
    where +

    Trait Implementations§

    Source§

    impl Clone for ConnectionClose

    Source§

    fn clone(&self) -> ConnectionClose

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    Source§

    impl Debug for ConnectionClose

    Source§

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

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

    impl Display for ConnectionClose

    Source§

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

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

    impl From<Error> for ConnectionClose

    Source§

    fn from(x: Error) -> ConnectionClose

    Converts to this type from the input type.
    Source§

    impl PartialEq for ConnectionClose

    Source§

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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 ConnectionClose

    Source§

    impl StructuralPartialEq for ConnectionClose

    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 diff --git a/pr/547/docs/noq/struct.ConnectionId.html b/pr/547/docs/noq/struct.ConnectionId.html index dab688b98..2c1548a9b 100644 --- a/pr/547/docs/noq/struct.ConnectionId.html +++ b/pr/547/docs/noq/struct.ConnectionId.html @@ -1,7 +1,7 @@ -ConnectionId in noq - Rust

    ConnectionId

    Struct ConnectionId 

    pub struct ConnectionId { /* private fields */ }
    Expand description

    Protocol-level identifier for a connection.

    +ConnectionId in noq - Rust

    ConnectionId

    Struct ConnectionId 

    Source
    pub struct ConnectionId { /* private fields */ }
    Expand description

    Protocol-level identifier for a connection.

    Mainly useful for identifying this connection’s packets on the wire with tools like Wireshark.

    -

    Implementations§

    §

    impl ConnectionId

    pub fn new(bytes: &[u8]) -> ConnectionId

    Construct cid from byte array

    -

    pub fn from_buf(buf: &mut (impl Buf + ?Sized), len: usize) -> ConnectionId

    Constructs cid by reading len bytes from a Buf

    +

    Implementations§

    Source§

    impl ConnectionId

    Source

    pub fn new(bytes: &[u8]) -> ConnectionId

    Construct cid from byte array

    +
    Source

    pub fn from_buf(buf: &mut (impl Buf + ?Sized), len: usize) -> ConnectionId

    Constructs cid by reading len bytes from a Buf

    Callers need to assure that buf.remaining() >= len

    Methods from Deref<Target = [u8]>§

    1.23.0 · Source

    pub fn is_ascii(&self) -> bool

    Checks if all bytes in this slice are within the ASCII range.

    Source

    pub fn as_ascii(&self) -> Option<&[AsciiChar]>

    🔬This is a nightly-only experimental API. (ascii_char)

    If this slice is_ascii, returns it as a slice of @@ -2422,17 +2422,17 @@ is mapped to its ASCII lower case equivalent.

    ASCII letters ‘A’ to ‘Z’ are mapped to ‘a’ to ‘z’, but non-ASCII letters are unchanged.

    To lowercase the value in-place, use make_ascii_lowercase.

    -

    Trait Implementations§

    §

    impl Clone for ConnectionId

    §

    fn clone(&self) -> ConnectionId

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for ConnectionId

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Deref for ConnectionId

    §

    type Target = [u8]

    The resulting type after dereferencing.
    §

    fn deref(&self) -> &[u8]

    Dereferences the value.
    §

    impl DerefMut for ConnectionId

    §

    fn deref_mut(&mut self) -> &mut [u8]

    Mutably dereferences the value.
    §

    impl Display for ConnectionId

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Hash for ConnectionId

    §

    fn hash<__H>(&self, state: &mut __H)
    where +

    Trait Implementations§

    Source§

    impl Clone for ConnectionId

    Source§

    fn clone(&self) -> ConnectionId

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    Source§

    impl Debug for ConnectionId

    Source§

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

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

    impl Deref for ConnectionId

    Source§

    type Target = [u8]

    The resulting type after dereferencing.
    Source§

    fn deref(&self) -> &[u8]

    Dereferences the value.
    Source§

    impl DerefMut for ConnectionId

    Source§

    fn deref_mut(&mut self) -> &mut [u8]

    Mutably dereferences the value.
    Source§

    impl Display for ConnectionId

    Source§

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

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

    impl Hash for ConnectionId

    Source§

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · Source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl Ord for ConnectionId

    §

    fn cmp(&self, other: &ConnectionId) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · Source§

    fn max(self, other: Self) -> Self
    where + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    Source§

    impl Ord for ConnectionId

    Source§

    fn cmp(&self, other: &ConnectionId) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · Source§

    fn max(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · Source§

    fn min(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · Source§

    fn clamp(self, min: Self, max: Self) -> Self
    where - Self: Sized,

    Restrict a value to a certain interval. Read more
    §

    impl PartialEq for ConnectionId

    §

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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.
    §

    impl PartialOrd for ConnectionId

    §

    fn partial_cmp(&self, other: &ConnectionId) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · Source§

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

    Tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · Source§

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

    Tests less than or equal to (for self and other) and is used by the + Self: Sized,

    Restrict a value to a certain interval. Read more
    Source§

    impl PartialEq for ConnectionId

    Source§

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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 PartialOrd for ConnectionId

    Source§

    fn partial_cmp(&self, other: &ConnectionId) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · Source§

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

    Tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · Source§

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

    Tests less than or equal to (for self and other) and is used by the <= operator. Read more
    1.0.0 · Source§

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

    Tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · Source§

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

    Tests greater than or equal to (for self and other) and is used by -the >= operator. Read more
    §

    impl Copy for ConnectionId

    §

    impl Eq for ConnectionId

    §

    impl StructuralPartialEq for ConnectionId

    Auto Trait Implementations§

    Blanket Implementations§

    Source§

    impl<T> Any for T
    where +the >= operator. Read more

    Source§

    impl Copy for ConnectionId

    Source§

    impl Eq for ConnectionId

    Source§

    impl StructuralPartialEq for ConnectionId

    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 diff --git a/pr/547/docs/noq/struct.ConnectionStats.html b/pr/547/docs/noq/struct.ConnectionStats.html index e12ede0aa..cd16a9d7b 100644 --- a/pr/547/docs/noq/struct.ConnectionStats.html +++ b/pr/547/docs/noq/struct.ConnectionStats.html @@ -1,4 +1,4 @@ -ConnectionStats in noq - Rust

    ConnectionStats

    Struct ConnectionStats 

    #[non_exhaustive]
    pub struct ConnectionStats { +ConnectionStats in noq - Rust

    ConnectionStats

    Struct ConnectionStats 

    Source
    #[non_exhaustive]
    pub struct ConnectionStats { pub udp_tx: UdpStats, pub udp_rx: UdpStats, pub frame_tx: FrameStats, @@ -10,7 +10,7 @@ paths that exist as well as all paths that previously existed.

    §udp_rx: UdpStats

    Statistics about UDP datagrams received on a connection.

    §frame_tx: FrameStats

    Statistics about frames transmitted on a connection.

    §frame_rx: FrameStats

    Statistics about frames received on a connection.

    -

    Trait Implementations§

    §

    impl Add<PathStats> for ConnectionStats

    §

    type Output = ConnectionStats

    The resulting type after applying the + operator.
    §

    fn add(self, rhs: PathStats) -> <ConnectionStats as Add<PathStats>>::Output

    Performs the + operation. Read more
    §

    impl AddAssign<PathStats> for ConnectionStats

    §

    fn add_assign(&mut self, rhs: PathStats)

    Performs the += operation. Read more
    §

    impl Clone for ConnectionStats

    §

    fn clone(&self) -> ConnectionStats

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for ConnectionStats

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Default for ConnectionStats

    §

    fn default() -> ConnectionStats

    Returns the “default value” for a type. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    Source§

    impl<T> Any for T
    where +

    Trait Implementations§

    Source§

    impl Add<PathStats> for ConnectionStats

    Source§

    type Output = ConnectionStats

    The resulting type after applying the + operator.
    Source§

    fn add(self, rhs: PathStats) -> <ConnectionStats as Add<PathStats>>::Output

    Performs the + operation. Read more
    Source§

    impl AddAssign<PathStats> for ConnectionStats

    Source§

    fn add_assign(&mut self, rhs: PathStats)

    Performs the += operation. Read more
    Source§

    impl Clone for ConnectionStats

    Source§

    fn clone(&self) -> ConnectionStats

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    Source§

    impl Debug for ConnectionStats

    Source§

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

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

    impl Default for ConnectionStats

    Source§

    fn default() -> ConnectionStats

    Returns the “default value” for a type. Read more

    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 diff --git a/pr/547/docs/noq/struct.EndpointConfig.html b/pr/547/docs/noq/struct.EndpointConfig.html index 8e381df1c..119aa6e09 100644 --- a/pr/547/docs/noq/struct.EndpointConfig.html +++ b/pr/547/docs/noq/struct.EndpointConfig.html @@ -1,16 +1,16 @@ -EndpointConfig in noq - Rust

    EndpointConfig

    Struct EndpointConfig 

    pub struct EndpointConfig { /* private fields */ }
    Expand description

    Global configuration for the endpoint, affecting all connections

    +EndpointConfig in noq - Rust

    EndpointConfig

    Struct EndpointConfig 

    Source
    pub struct EndpointConfig { /* private fields */ }
    Expand description

    Global configuration for the endpoint, affecting all connections

    Default values should be suitable for most internet applications.

    -

    Implementations§

    §

    impl EndpointConfig

    pub fn new(reset_key: Arc<dyn HmacKey>) -> EndpointConfig

    Create a default config with a particular reset_key

    -

    pub fn cid_generator<F>(&mut self, factory: F) -> &mut EndpointConfig
    where +

    Implementations§

    Source§

    impl EndpointConfig

    Source

    pub fn new(reset_key: Arc<dyn HmacKey>) -> EndpointConfig

    Create a default config with a particular reset_key

    +
    Source

    pub fn cid_generator<F>(&mut self, factory: F) -> &mut EndpointConfig
    where F: Fn() -> Box<dyn ConnectionIdGenerator> + Send + Sync + 'static,

    Supply a custom connection ID generator factory

    Called once by each Endpoint constructed from this configuration to obtain the CID generator which will be used to generate the CIDs used for incoming packets on all connections involving that Endpoint. A custom CID generator allows applications to embed information in local connection IDs, e.g. to support stateless packet-level load balancers.

    -

    Defaults to [HashedConnectionIdGenerator].

    -

    pub fn reset_key(&mut self, key: Arc<dyn HmacKey>) -> &mut EndpointConfig

    Private key used to send authenticated connection resets to peers who were +

    Defaults to HashedConnectionIdGenerator.

    +
    Source

    pub fn reset_key(&mut self, key: Arc<dyn HmacKey>) -> &mut EndpointConfig

    Private key used to send authenticated connection resets to peers who were communicating with a previous instance of this endpoint.

    -

    pub fn max_udp_payload_size( +

    Source

    pub fn max_udp_payload_size( &mut self, value: u16, ) -> Result<&mut EndpointConfig, ConfigError>

    Maximum UDP payload size accepted from peers (excluding UDP and IP overhead).

    @@ -19,27 +19,27 @@ communicating with a previous instance of this endpoint.

    1500 byte Ethernet MTU. Deployments on links with larger MTUs (e.g. loopback or Ethernet with jumbo frames) can raise this to improve performance at the cost of a linear increase in datagram receive buffer size.

    -

    pub fn get_max_udp_payload_size(&self) -> u64

    Get the current value of max_udp_payload_size

    -

    pub fn supported_versions( +

    Source

    pub fn get_max_udp_payload_size(&self) -> u64

    Get the current value of max_udp_payload_size

    +
    Source

    pub fn supported_versions( &mut self, supported_versions: Vec<u32>, ) -> &mut EndpointConfig

    Override supported QUIC versions

    -

    pub fn grease_quic_bit(&mut self, value: bool) -> &mut EndpointConfig

    Whether to accept QUIC packets containing any value for the fixed bit

    +
    Source

    pub fn grease_quic_bit(&mut self, value: bool) -> &mut EndpointConfig

    Whether to accept QUIC packets containing any value for the fixed bit

    Enabled by default. Helps protect against protocol ossification and makes traffic less identifiable to observers. Disable if helping observers identify this traffic as QUIC is desired.

    -

    pub fn min_reset_interval(&mut self, value: Duration) -> &mut EndpointConfig

    Minimum interval between outgoing stateless reset packets

    +
    Source

    pub fn min_reset_interval(&mut self, value: Duration) -> &mut EndpointConfig

    Minimum interval between outgoing stateless reset packets

    Defaults to 20ms. Limits the impact of attacks which flood an endpoint with garbage packets, e.g. ISAKMP/IKE amplification. Larger values provide a stronger defense, but may delay detection of some error conditions by clients. Using a ConnectionIdGenerator with a low rate of false positives in validate reduces the risk incurred by a small minimum reset interval.

    -

    pub fn rng_seed(&mut self, seed: Option<[u8; 32]>) -> &mut EndpointConfig

    Optional seed to be used internally for random number generation

    +
    Source

    pub fn rng_seed(&mut self, seed: Option<[u8; 32]>) -> &mut EndpointConfig

    Optional seed to be used internally for random number generation

    By default, noq will initialize an endpoint’s rng using a platform entropy source. However, you can seed the rng yourself through this method (e.g. if you need to run noq deterministically or if you are using noq in an environment that doesn’t have a source of entropy available).

    -

    Trait Implementations§

    §

    impl Clone for EndpointConfig

    §

    fn clone(&self) -> EndpointConfig

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for EndpointConfig

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Default for EndpointConfig

    §

    fn default() -> EndpointConfig

    Returns the “default value” for a type. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    Source§

    impl<T> Any for T
    where +

    Trait Implementations§

    Source§

    impl Clone for EndpointConfig

    Source§

    fn clone(&self) -> EndpointConfig

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    Source§

    impl Debug for EndpointConfig

    Source§

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

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

    impl Default for EndpointConfig

    Source§

    fn default() -> EndpointConfig

    Returns the “default value” for a type. Read more

    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 diff --git a/pr/547/docs/noq/struct.FrameStats.html b/pr/547/docs/noq/struct.FrameStats.html index 34132d3a4..88a37d94e 100644 --- a/pr/547/docs/noq/struct.FrameStats.html +++ b/pr/547/docs/noq/struct.FrameStats.html @@ -1,4 +1,4 @@ -FrameStats in noq - Rust

    FrameStats

    Struct FrameStats 

    #[non_exhaustive]
    pub struct FrameStats {
    Show 37 fields +FrameStats in noq - Rust

    FrameStats

    Struct FrameStats 

    Source
    #[non_exhaustive]
    pub struct FrameStats {
    Show 37 fields pub acks: u64, pub path_acks: u64, pub ack_frequency: u64, @@ -37,8 +37,8 @@ pub reach_out: u64, pub remove_address: u64,
    }
    Expand description

    Number of frames transmitted or received of each frame type.

    -

    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.
    §acks: u64§path_acks: u64§ack_frequency: u64§crypto: u64§connection_close: u64§data_blocked: u64§datagram: u64§handshake_done: u8§immediate_ack: u64§max_data: u64§max_stream_data: u64§max_streams_bidi: u64§max_streams_uni: u64§new_connection_id: u64§path_new_connection_id: u64§new_token: u64§path_challenge: u64§path_response: u64§ping: u64§reset_stream: u64§retire_connection_id: u64§path_retire_connection_id: u64§stream_data_blocked: u64§streams_blocked_bidi: u64§streams_blocked_uni: u64§stop_sending: u64§stream: u64§observed_addr: u64§path_abandon: u64§path_status_available: u64§path_status_backup: u64§max_path_id: u64§paths_blocked: u64§path_cids_blocked: u64§add_address: u64§reach_out: u64§remove_address: u64

    Trait Implementations§

    §

    impl Add for FrameStats

    §

    type Output = FrameStats

    The resulting type after applying the + operator.
    §

    fn add(self, __rhs: FrameStats) -> <FrameStats as Add>::Output

    Performs the + operation. Read more
    §

    impl AddAssign for FrameStats

    §

    fn add_assign(&mut self, __rhs: FrameStats)

    Performs the += operation. Read more
    §

    impl Clone for FrameStats

    §

    fn clone(&self) -> FrameStats

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for FrameStats

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Default for FrameStats

    §

    fn default() -> FrameStats

    Returns the “default value” for a type. Read more
    §

    impl PartialEq for FrameStats

    §

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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.
    §

    impl Copy for FrameStats

    §

    impl Eq for FrameStats

    §

    impl StructuralPartialEq for FrameStats

    Auto Trait Implementations§

    Blanket Implementations§

    Source§

    impl<T> Any for T
    where +

    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.
    §acks: u64§path_acks: u64§ack_frequency: u64§crypto: u64§connection_close: u64§data_blocked: u64§datagram: u64§handshake_done: u8§immediate_ack: u64§max_data: u64§max_stream_data: u64§max_streams_bidi: u64§max_streams_uni: u64§new_connection_id: u64§path_new_connection_id: u64§new_token: u64§path_challenge: u64§path_response: u64§ping: u64§reset_stream: u64§retire_connection_id: u64§path_retire_connection_id: u64§stream_data_blocked: u64§streams_blocked_bidi: u64§streams_blocked_uni: u64§stop_sending: u64§stream: u64§observed_addr: u64§path_abandon: u64§path_status_available: u64§path_status_backup: u64§max_path_id: u64§paths_blocked: u64§path_cids_blocked: u64§add_address: u64§reach_out: u64§remove_address: u64

    Trait Implementations§

    Source§

    impl Add for FrameStats

    Source§

    type Output = FrameStats

    The resulting type after applying the + operator.
    Source§

    fn add(self, __rhs: FrameStats) -> <FrameStats as Add>::Output

    Performs the + operation. Read more
    Source§

    impl AddAssign for FrameStats

    Source§

    fn add_assign(&mut self, __rhs: FrameStats)

    Performs the += operation. Read more
    Source§

    impl Clone for FrameStats

    Source§

    fn clone(&self) -> FrameStats

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    Source§

    impl Debug for FrameStats

    Source§

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

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

    impl Default for FrameStats

    Source§

    fn default() -> FrameStats

    Returns the “default value” for a type. Read more
    Source§

    impl PartialEq for FrameStats

    Source§

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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 Copy for FrameStats

    Source§

    impl Eq for FrameStats

    Source§

    impl StructuralPartialEq for FrameStats

    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 diff --git a/pr/547/docs/noq/struct.IdleTimeout.html b/pr/547/docs/noq/struct.IdleTimeout.html index 02edaf5b2..879ea2d79 100644 --- a/pr/547/docs/noq/struct.IdleTimeout.html +++ b/pr/547/docs/noq/struct.IdleTimeout.html @@ -1,4 +1,4 @@ -IdleTimeout in noq - Rust

    IdleTimeout

    Struct IdleTimeout 

    pub struct IdleTimeout(/* private fields */);
    Expand description

    Maximum duration of inactivity to accept before timing out the connection

    +IdleTimeout in noq - Rust

    IdleTimeout

    Struct IdleTimeout 

    Source
    pub struct IdleTimeout(/* private fields */);
    Expand description

    Maximum duration of inactivity to accept before timing out the connection

    This wraps an underlying VarInt, representing the duration in milliseconds. Values can be constructed by converting directly from VarInt, or using TryFrom<Duration>.

    @@ -6,19 +6,19 @@ constructed by converting directly from VarInt, or using TryF let timeout = IdleTimeout::from(VarInt::from_u32(10_000)); // Try to convert a `Duration` into a `VarInt`-encoded timeout -let timeout = IdleTimeout::try_from(Duration::from_secs(10))?;

    Trait Implementations§

    §

    impl Clone for IdleTimeout

    §

    fn clone(&self) -> IdleTimeout

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for IdleTimeout

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Default for IdleTimeout

    §

    fn default() -> IdleTimeout

    Returns the “default value” for a type. Read more
    §

    impl From<VarInt> for IdleTimeout

    §

    fn from(inner: VarInt) -> IdleTimeout

    Converts to this type from the input type.
    §

    impl Hash for IdleTimeout

    §

    fn hash<__H>(&self, state: &mut __H)
    where +let timeout = IdleTimeout::try_from(Duration::from_secs(10))?;

    Trait Implementations§

    Source§

    impl Clone for IdleTimeout

    Source§

    fn clone(&self) -> IdleTimeout

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    Source§

    impl Debug for IdleTimeout

    Source§

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

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

    impl Default for IdleTimeout

    Source§

    fn default() -> IdleTimeout

    Returns the “default value” for a type. Read more
    Source§

    impl From<VarInt> for IdleTimeout

    Source§

    fn from(inner: VarInt) -> IdleTimeout

    Converts to this type from the input type.
    Source§

    impl Hash for IdleTimeout

    Source§

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · Source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl Ord for IdleTimeout

    §

    fn cmp(&self, other: &IdleTimeout) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · Source§

    fn max(self, other: Self) -> Self
    where + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    Source§

    impl Ord for IdleTimeout

    Source§

    fn cmp(&self, other: &IdleTimeout) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · Source§

    fn max(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · Source§

    fn min(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · Source§

    fn clamp(self, min: Self, max: Self) -> Self
    where - Self: Sized,

    Restrict a value to a certain interval. Read more
    §

    impl PartialEq for IdleTimeout

    §

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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.
    §

    impl PartialOrd for IdleTimeout

    §

    fn partial_cmp(&self, other: &IdleTimeout) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · Source§

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

    Tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · Source§

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

    Tests less than or equal to (for self and other) and is used by the + Self: Sized,
    Restrict a value to a certain interval. Read more
    Source§

    impl PartialEq for IdleTimeout

    Source§

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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 PartialOrd for IdleTimeout

    Source§

    fn partial_cmp(&self, other: &IdleTimeout) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · Source§

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

    Tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · Source§

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

    Tests less than or equal to (for self and other) and is used by the <= operator. Read more
    1.0.0 · Source§

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

    Tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · Source§

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

    Tests greater than or equal to (for self and other) and is used by -the >= operator. Read more
    §

    impl TryFrom<Duration> for IdleTimeout

    §

    type Error = VarIntBoundsExceeded

    The type returned in the event of a conversion error.
    §

    fn try_from( +the >= operator. Read more

    Source§

    impl TryFrom<Duration> for IdleTimeout

    Source§

    type Error = VarIntBoundsExceeded

    The type returned in the event of a conversion error.
    Source§

    fn try_from( timeout: Duration, -) -> Result<IdleTimeout, <IdleTimeout as TryFrom<Duration>>::Error>

    Performs the conversion.
    §

    impl Copy for IdleTimeout

    §

    impl Eq for IdleTimeout

    §

    impl StructuralPartialEq for IdleTimeout

    Auto Trait Implementations§

    Blanket Implementations§

    Source§

    impl<T> Any for T

    Performs the conversion.
    Source§

    impl Copy for IdleTimeout

    Source§

    impl Eq for IdleTimeout

    Source§

    impl StructuralPartialEq for IdleTimeout

    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 diff --git a/pr/547/docs/noq/struct.Incoming.html b/pr/547/docs/noq/struct.Incoming.html index 1b2646722..5886d3b86 100644 --- a/pr/547/docs/noq/struct.Incoming.html +++ b/pr/547/docs/noq/struct.Incoming.html @@ -20,7 +20,7 @@ The inverse is not guaranteed.

    If self.remote_address_validated() is false, self.may_retry() is guaranteed to be true. The inverse is not guaranteed.

    Source

    pub fn orig_dst_cid(&self) -> ConnectionId

    The original destination CID when initiating the connection

    -
    Source

    pub fn decrypt(&self) -> Option<DecryptedInitial>

    Decrypt the Initial packet payload

    +
    Source

    pub fn decrypt(&self) -> Option<DecryptedInitial>

    Decrypt the Initial packet payload

    This clones and decrypts the packet payload (~1200 bytes). Can be used to extract information from the TLS ClientHello without completing the handshake.

    Trait Implementations§

    Source§

    impl Debug for Incoming

    Source§

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

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

    impl Drop for Incoming

    Source§

    fn drop(&mut self)

    Executes the destructor for this type. Read more
    Source§

    impl IntoFuture for Incoming

    Source§

    type Output = Result<Connection, ConnectionError>

    The output that the future will produce on completion.
    Source§

    type IntoFuture = IncomingFuture

    Which kind of future are we turning this into?
    Source§

    fn into_future(self) -> Self::IntoFuture

    Creates a future from a value. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    Source§

    impl<T> Any for T
    where diff --git a/pr/547/docs/noq/struct.InvalidCid.html b/pr/547/docs/noq/struct.InvalidCid.html index b24d97db4..2cc9c3850 100644 --- a/pr/547/docs/noq/struct.InvalidCid.html +++ b/pr/547/docs/noq/struct.InvalidCid.html @@ -1,5 +1,5 @@ -InvalidCid in noq - Rust

    InvalidCid

    Struct InvalidCid 

    pub struct InvalidCid;
    Expand description

    The connection ID was not recognized by the ConnectionIdGenerator

    -

    Trait Implementations§

    §

    impl Clone for InvalidCid

    §

    fn clone(&self) -> InvalidCid

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for InvalidCid

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Copy for InvalidCid

    Auto Trait Implementations§

    Blanket Implementations§

    Source§

    impl<T> Any for T
    where +InvalidCid in noq - Rust

    InvalidCid

    Struct InvalidCid 

    Source
    pub struct InvalidCid;
    Expand description

    The connection ID was not recognized by the ConnectionIdGenerator

    +

    Trait Implementations§

    Source§

    impl Clone for InvalidCid

    Source§

    fn clone(&self) -> InvalidCid

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    Source§

    impl Debug for InvalidCid

    Source§

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

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

    impl Copy for InvalidCid

    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 diff --git a/pr/547/docs/noq/struct.Lagged.html b/pr/547/docs/noq/struct.Lagged.html index c3ac064f8..711b8f45f 100644 --- a/pr/547/docs/noq/struct.Lagged.html +++ b/pr/547/docs/noq/struct.Lagged.html @@ -1,7 +1,8 @@ -Lagged in noq - Rust

    Lagged

    Struct Lagged 

    Source
    pub struct Lagged(pub u64);
    Expand description

    The receiver lagged too far behind. Attempting to receive again will -return the oldest message still retained by the channel.

    -

    Tuple Fields§

    §0: u64

    Trait Implementations§

    Source§

    impl Clone for Lagged

    Source§

    fn clone(&self) -> Lagged

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    Source§

    impl Debug for Lagged

    Source§

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

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

    impl Display for Lagged

    Source§

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

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

    impl Error for Lagged

    1.30.0 · Source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    Returns the lower-level source of this error, if any. Read more
    1.0.0 · Source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · Source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    Source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type-based access to context intended for error reports. Read more
    Source§

    impl PartialEq for Lagged

    Source§

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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 Lagged

    Source§

    impl StructuralPartialEq for Lagged

    Auto Trait Implementations§

    §

    impl Freeze for Lagged

    §

    impl RefUnwindSafe for Lagged

    §

    impl Send for Lagged

    §

    impl Sync for Lagged

    §

    impl Unpin for Lagged

    §

    impl UnwindSafe for Lagged

    Blanket Implementations§

    Source§

    impl<T> Any for T
    where +Lagged in noq - Rust

    Lagged

    Struct Lagged 

    Source
    pub struct Lagged(pub u64);
    Expand description

    The receiver lagged too far behind.

    +

    Attempting to receive again will return the oldest message still retained +by the channel.

    +

    Tuple Fields§

    §0: u64

    Trait Implementations§

    Source§

    impl Clone for Lagged

    Source§

    fn clone(&self) -> Lagged

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    Source§

    impl Debug for Lagged

    Source§

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

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

    impl Display for Lagged

    Source§

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

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

    impl Error for Lagged

    1.30.0 · Source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    Returns the lower-level source of this error, if any. Read more
    1.0.0 · Source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · Source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    Source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type-based access to context intended for error reports. Read more
    Source§

    impl PartialEq for Lagged

    Source§

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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 Lagged

    Source§

    impl StructuralPartialEq for Lagged

    Auto Trait Implementations§

    §

    impl Freeze for Lagged

    §

    impl RefUnwindSafe for Lagged

    §

    impl Send for Lagged

    §

    impl Sync for Lagged

    §

    impl Unpin for Lagged

    §

    impl UnwindSafe for Lagged

    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 diff --git a/pr/547/docs/noq/struct.MtuDiscoveryConfig.html b/pr/547/docs/noq/struct.MtuDiscoveryConfig.html index 6f8a13ad0..49e9d38cd 100644 --- a/pr/547/docs/noq/struct.MtuDiscoveryConfig.html +++ b/pr/547/docs/noq/struct.MtuDiscoveryConfig.html @@ -1,4 +1,4 @@ -MtuDiscoveryConfig in noq - Rust

    MtuDiscoveryConfig

    Struct MtuDiscoveryConfig 

    pub struct MtuDiscoveryConfig { /* private fields */ }
    Expand description

    Parameters governing MTU discovery.

    +MtuDiscoveryConfig in noq - Rust

    MtuDiscoveryConfig

    Struct MtuDiscoveryConfig 

    Source
    pub struct MtuDiscoveryConfig { /* private fields */ }
    Expand description

    Parameters governing MTU discovery.

    §The why of MTU discovery

    By design, QUIC ensures during the handshake that the network path between the client and the server is able to transmit unfragmented UDP packets with a body of 1200 bytes. In other words, @@ -42,25 +42,25 @@ timer that was set based on Implementations§

    §

    impl MtuDiscoveryConfig

    pub fn interval(&mut self, value: Duration) -> &mut MtuDiscoveryConfig

    Specifies the time to wait after completing MTU discovery before starting a new MTU +

    Implementations§

    Source§

    impl MtuDiscoveryConfig

    Source

    pub fn interval(&mut self, value: Duration) -> &mut MtuDiscoveryConfig

    Specifies the time to wait after completing MTU discovery before starting a new MTU discovery run.

    Defaults to 600 seconds, as recommended by RFC 8899.

    -

    pub fn upper_bound(&mut self, value: u16) -> &mut MtuDiscoveryConfig

    Specifies the upper bound to the max UDP payload size that MTU discovery will search for.

    +
    Source

    pub fn upper_bound(&mut self, value: u16) -> &mut MtuDiscoveryConfig

    Specifies the upper bound to the max UDP payload size that MTU discovery will search for.

    Defaults to 1452, to stay within Ethernet’s MTU when using IPv4 and IPv6. The highest allowed value is 65527, which corresponds to the maximum permitted UDP payload on IPv6.

    It is safe to use an arbitrarily high upper bound, regardless of the network path’s MTU. The only drawback is that MTU discovery might take more time to finish.

    -

    pub fn black_hole_cooldown( +

    Source

    pub fn black_hole_cooldown( &mut self, value: Duration, ) -> &mut MtuDiscoveryConfig

    Specifies the amount of time that MTU discovery should wait after a black hole was detected before running again. Defaults to one minute.

    Black hole detection can be spuriously triggered in case of congestion, so it makes sense to try MTU discovery again after a short period of time.

    -

    pub fn minimum_change(&mut self, value: u16) -> &mut MtuDiscoveryConfig

    Specifies the minimum MTU change to stop the MTU discovery phase. +

    Source

    pub fn minimum_change(&mut self, value: u16) -> &mut MtuDiscoveryConfig

    Specifies the minimum MTU change to stop the MTU discovery phase. Defaults to 20.

    -

    Trait Implementations§

    §

    impl Clone for MtuDiscoveryConfig

    §

    fn clone(&self) -> MtuDiscoveryConfig

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for MtuDiscoveryConfig

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Default for MtuDiscoveryConfig

    §

    fn default() -> MtuDiscoveryConfig

    Returns the “default value” for a type. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    Source§

    impl<T> Any for T
    where +

    Trait Implementations§

    Source§

    impl Clone for MtuDiscoveryConfig

    Source§

    fn clone(&self) -> MtuDiscoveryConfig

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    Source§

    impl Debug for MtuDiscoveryConfig

    Source§

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

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

    impl Default for MtuDiscoveryConfig

    Source§

    fn default() -> MtuDiscoveryConfig

    Returns the “default value” for a type. Read more

    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 diff --git a/pr/547/docs/noq/struct.NatTraversalUpdates.html b/pr/547/docs/noq/struct.NatTraversalUpdates.html index 32d183a63..ce3d7727d 100644 --- a/pr/547/docs/noq/struct.NatTraversalUpdates.html +++ b/pr/547/docs/noq/struct.NatTraversalUpdates.html @@ -1,5 +1,5 @@ -NatTraversalUpdates in noq - Rust

    NatTraversalUpdates

    Struct NatTraversalUpdates 

    Source
    pub struct NatTraversalUpdates { /* private fields */ }
    Expand description

    A stream of NAT traversal updates for a connection.

    -

    Trait Implementations§

    Source§

    impl Debug for NatTraversalUpdates

    Source§

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

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

    impl Stream for NatTraversalUpdates

    Source§

    type Item = Result<Event, Lagged>

    Values yielded by the stream.
    Source§

    fn poll_next( +NatTraversalUpdates in noq - Rust

    NatTraversalUpdates

    Struct NatTraversalUpdates 

    Source
    pub struct NatTraversalUpdates { /* private fields */ }
    Expand description

    A stream of NAT traversal updates for a connection.

    +

    Trait Implementations§

    Source§

    impl Debug for NatTraversalUpdates

    Source§

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

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

    impl Stream for NatTraversalUpdates

    Source§

    type Item = Result<Event, Lagged>

    Values yielded by the stream.
    Source§

    fn poll_next( self: Pin<&mut Self>, cx: &mut Context<'_>, ) -> Poll<Option<Self::Item>>

    Attempt to pull out the next value of this stream, registering the diff --git a/pr/547/docs/noq/struct.NoneTokenLog.html b/pr/547/docs/noq/struct.NoneTokenLog.html index eab0ddd81..35a1aa5fe 100644 --- a/pr/547/docs/noq/struct.NoneTokenLog.html +++ b/pr/547/docs/noq/struct.NoneTokenLog.html @@ -1,5 +1,5 @@ -NoneTokenLog in noq - Rust

    NoneTokenLog

    Struct NoneTokenLog 

    pub struct NoneTokenLog;
    Expand description

    Null implementation of TokenLog, which never accepts tokens

    -

    Trait Implementations§

    §

    impl TokenLog for NoneTokenLog

    §

    fn check_and_insert( +NoneTokenLog in noq - Rust

    NoneTokenLog

    Struct NoneTokenLog 

    Source
    pub struct NoneTokenLog;
    Expand description

    Null implementation of TokenLog, which never accepts tokens

    +

    Trait Implementations§

    Source§

    impl TokenLog for NoneTokenLog

    Source§

    fn check_and_insert( &self, _: u128, _: SystemTime, diff --git a/pr/547/docs/noq/struct.NoneTokenStore.html b/pr/547/docs/noq/struct.NoneTokenStore.html index f41989803..ce07dc3f6 100644 --- a/pr/547/docs/noq/struct.NoneTokenStore.html +++ b/pr/547/docs/noq/struct.NoneTokenStore.html @@ -1,5 +1,5 @@ -NoneTokenStore in noq - Rust

    NoneTokenStore

    Struct NoneTokenStore 

    pub struct NoneTokenStore;
    Expand description

    Null implementation of TokenStore, which does not store any tokens

    -

    Trait Implementations§

    §

    impl TokenStore for NoneTokenStore

    §

    fn insert(&self, _: &str, _: Bytes)

    Potentially store a token for later one-time use Read more
    §

    fn take(&self, _: &str) -> Option<Bytes>

    Try to find and take a token that was stored with the given server name Read more

    Auto Trait Implementations§

    Blanket Implementations§

    Source§

    impl<T> Any for T
    where +NoneTokenStore in noq - Rust

    NoneTokenStore

    Struct NoneTokenStore 

    Source
    pub struct NoneTokenStore;
    Expand description

    Null implementation of TokenStore, which does not store any tokens

    +

    Trait Implementations§

    Source§

    impl TokenStore for NoneTokenStore

    Source§

    fn insert(&self, _: &str, _: Bytes)

    Potentially store a token for later one-time use Read more
    Source§

    fn take(&self, _: &str) -> Option<Bytes>

    Try to find and take a token that was stored with the given server name Read more

    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> From<T> for T

    Source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/pr/547/docs/noq/struct.ObservedExternalAddr.html b/pr/547/docs/noq/struct.ObservedExternalAddr.html index 9ba289c43..817ca05f9 100644 --- a/pr/547/docs/noq/struct.ObservedExternalAddr.html +++ b/pr/547/docs/noq/struct.ObservedExternalAddr.html @@ -1,10 +1,10 @@ -ObservedExternalAddr in noq - Rust

    ObservedExternalAddr

    Struct ObservedExternalAddr 

    Source
    pub struct ObservedExternalAddr { /* private fields */ }
    Expand description

    Watches the external address reported by the peer for this connection.

    +ObservedExternalAddr in noq - Rust

    ObservedExternalAddr

    Struct ObservedExternalAddr 

    Source
    pub struct ObservedExternalAddr { /* private fields */ }
    Expand description

    Watches the external address reported by the peer for this connection.

    Implements [Stream] yielding SocketAddr on each change. Use get to read the current value without waiting.

    -

    Implementations§

    Source§

    impl ObservedExternalAddr

    Source

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

    Returns the most recently observed external address, or None if the +

    Implementations§

    Source§

    impl ObservedExternalAddr

    Source

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

    Returns the most recently observed external address, or None if the peer has not yet reported one. Retains the last value even after the stream is closed.

    -

    Trait Implementations§

    Source§

    impl Debug for ObservedExternalAddr

    Source§

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

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

    impl Stream for ObservedExternalAddr

    Source§

    type Item = SocketAddr

    Values yielded by the stream.
    Source§

    fn poll_next( +

    Trait Implementations§

    Source§

    impl Debug for ObservedExternalAddr

    Source§

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

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

    impl Stream for ObservedExternalAddr

    Source§

    type Item = SocketAddr

    Values yielded by the stream.
    Source§

    fn poll_next( self: Pin<&mut Self>, cx: &mut Context<'_>, ) -> Poll<Option<Self::Item>>

    Attempt to pull out the next value of this stream, registering the diff --git a/pr/547/docs/noq/struct.OpenPath.html b/pr/547/docs/noq/struct.OpenPath.html index 4cad853e1..847bb563d 100644 --- a/pr/547/docs/noq/struct.OpenPath.html +++ b/pr/547/docs/noq/struct.OpenPath.html @@ -3,7 +3,7 @@

    If an error occurred before a path ID was allocated, None is returned. In this case the future is ready and polling it will immediately yield the error.

    The returned value remains the same for the entire lifetime of this future.

    -

    Trait Implementations§

    Source§

    impl Future for OpenPath

    Source§

    type Output = Result<Path, PathError>

    The type of value produced on completion.
    Source§

    fn poll(self: Pin<&mut Self>, ctx: &mut Context<'_>) -> Poll<Self::Output>

    Attempts to resolve the future to a final value, registering +

    Trait Implementations§

    Source§

    impl Future for OpenPath

    Source§

    type Output = Result<Path, PathError>

    The type of value produced on completion.
    Source§

    fn poll(self: Pin<&mut Self>, ctx: &mut Context<'_>) -> Poll<Self::Output>

    Attempts to resolve the future to a final value, registering the current task for wakeup if the value is not yet available. Read more

    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 diff --git a/pr/547/docs/noq/struct.Path.html b/pr/547/docs/noq/struct.Path.html index 3374e5b50..eb160423a 100644 --- a/pr/547/docs/noq/struct.Path.html +++ b/pr/547/docs/noq/struct.Path.html @@ -6,29 +6,29 @@ path’s stats are not dropped until the underlying connection is dropped, even if the path is abandoned.

    Source

    pub fn id(&self) -> PathId

    The PathId of this path.

    -
    Source

    pub fn status(&self) -> Result<PathStatus, ClosedPath>

    The current local [PathStatus] of this path.

    -
    Source

    pub fn set_status(&self, status: PathStatus) -> Result<(), SetPathStatusError>

    Sets the [PathStatus] of this path.

    +
    Source

    pub fn status(&self) -> Result<PathStatus, ClosedPath>

    The current local PathStatus of this path.

    +
    Source

    pub fn set_status(&self, status: PathStatus) -> Result<(), SetPathStatusError>

    Sets the PathStatus of this path.

    Source

    pub fn stats(&self) -> PathStats

    Returns the PathStats for this path.

    -
    Source

    pub fn close(&self) -> Result<(), ClosePathError>

    Closes this path.

    +
    Source

    pub fn close(&self) -> Result<(), ClosePathError>

    Closes this path.

    The path is immediately considered closed by the local endpoint. Once the state is removed, -after a short period of time for any in-flight packets, a [PathEvent::Abandoned] is +after a short period of time for any in-flight packets, a PathEvent::Abandoned is returned.

    Source

    pub fn set_max_idle_timeout( &self, timeout: Option<Duration>, -) -> Result<Option<Duration>, ClosedPath>

    Sets the keep_alive_interval for a specific path

    +) -> Result<Option<Duration>, ClosedPath>

    Sets the keep_alive_interval for a specific path

    See TransportConfig::default_path_keep_alive_interval for details.

    Returns the previous value of the setting.

    Source

    pub fn set_keep_alive_interval( &self, interval: Option<Duration>, -) -> Result<Option<Duration>, ClosedPath>

    Sets the keep_alive_interval for a specific path

    +) -> Result<Option<Duration>, ClosedPath>

    Sets the keep_alive_interval for a specific path

    See TransportConfig::default_path_keep_alive_interval for details.

    Returns the previous value of the setting.

    -
    Source

    pub fn observed_external_addr(&self) -> Result<AddressDiscovery, ClosedPath>

    Track changes on our external address as reported by the peer.

    +
    Source

    pub fn observed_external_addr(&self) -> Result<AddressDiscovery, ClosedPath>

    Track changes on our external address as reported by the peer.

    If the address-discovery extension is not negotiated, the stream will never return.

    -
    Source

    pub fn remote_address(&self) -> Result<SocketAddr, ClosedPath>

    The peer’s UDP address for this path.

    -
    Source

    pub fn ping(&self) -> Result<(), ClosedPath>

    Ping the remote endpoint over this path.

    +
    Source

    pub fn remote_address(&self) -> Result<SocketAddr, ClosedPath>

    The peer’s UDP address for this path.

    +
    Source

    pub fn ping(&self) -> Result<(), ClosedPath>

    Ping the remote endpoint over this path.

    Trait Implementations§

    Source§

    impl Clone for Path

    Source§

    fn clone(&self) -> Self

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    Source§

    impl Debug for Path

    Source§

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

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

    impl Drop for Path

    Source§

    fn drop(&mut self)

    Executes the destructor for this type. Read more
    Source§

    impl PartialEq for Path

    Source§

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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.

    Auto Trait Implementations§

    §

    impl Freeze for Path

    §

    impl RefUnwindSafe for Path

    §

    impl Send for Path

    §

    impl Sync for Path

    §

    impl Unpin for Path

    §

    impl UnwindSafe for Path

    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 diff --git a/pr/547/docs/noq/struct.PathEvents.html b/pr/547/docs/noq/struct.PathEvents.html index a5196166c..e6d65a411 100644 --- a/pr/547/docs/noq/struct.PathEvents.html +++ b/pr/547/docs/noq/struct.PathEvents.html @@ -1,5 +1,5 @@ -PathEvents in noq - Rust

    PathEvents

    Struct PathEvents 

    Source
    pub struct PathEvents { /* private fields */ }
    Expand description

    A stream of [PathEvent]s for all paths in a connection.

    -

    Trait Implementations§

    Source§

    impl Debug for PathEvents

    Source§

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

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

    impl Stream for PathEvents

    Source§

    type Item = Result<PathEvent, Lagged>

    Values yielded by the stream.
    Source§

    fn poll_next( +PathEvents in noq - Rust

    PathEvents

    Struct PathEvents 

    Source
    pub struct PathEvents { /* private fields */ }
    Expand description

    A stream of PathEvents for all paths in a connection.

    +

    Trait Implementations§

    Source§

    impl Debug for PathEvents

    Source§

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

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

    impl Stream for PathEvents

    Source§

    type Item = Result<PathEvent, Lagged>

    Values yielded by the stream.
    Source§

    fn poll_next( self: Pin<&mut Self>, cx: &mut Context<'_>, ) -> Poll<Option<Self::Item>>

    Attempt to pull out the next value of this stream, registering the diff --git a/pr/547/docs/noq/struct.PathId.html b/pr/547/docs/noq/struct.PathId.html index 7acd4d750..86a4cc45d 100644 --- a/pr/547/docs/noq/struct.PathId.html +++ b/pr/547/docs/noq/struct.PathId.html @@ -1,24 +1,24 @@ -PathId in noq - Rust

    PathId

    Struct PathId 

    pub struct PathId(/* private fields */);
    Expand description

    Id representing different paths when using multipath extension

    -

    Implementations§

    §

    impl PathId

    pub const MAX: PathId

    The maximum path ID allowed.

    -

    pub const ZERO: PathId

    The 0 path id.

    -

    pub fn saturating_add(self, rhs: impl Into<PathId>) -> PathId

    Saturating integer addition. Computes self + rhs, saturating at the numeric bounds instead +PathId in noq - Rust

    PathId

    Struct PathId 

    Source
    pub struct PathId(/* private fields */);
    Expand description

    Id representing different paths when using multipath extension

    +

    Implementations§

    Source§

    impl PathId

    Source

    pub const MAX: PathId

    The maximum path ID allowed.

    +
    Source

    pub const ZERO: PathId

    The 0 path id.

    +
    Source

    pub fn saturating_add(self, rhs: impl Into<PathId>) -> PathId

    Saturating integer addition. Computes self + rhs, saturating at the numeric bounds instead of overflowing.

    -

    pub fn saturating_sub(self, rhs: impl Into<PathId>) -> PathId

    Saturating integer subtraction. Computes self - rhs, saturating at the numeric bounds +

    Source

    pub fn saturating_sub(self, rhs: impl Into<PathId>) -> PathId

    Saturating integer subtraction. Computes self - rhs, saturating at the numeric bounds instead of overflowing.

    -

    Trait Implementations§

    §

    impl Clone for PathId

    §

    fn clone(&self) -> PathId

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for PathId

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Decodable for PathId

    §

    fn decode<B>(r: &mut B) -> Result<PathId, UnexpectedEnd>
    where - B: Buf,

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

    impl Default for PathId

    §

    fn default() -> PathId

    Returns the “default value” for a type. Read more
    §

    impl Display for PathId

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Encodable for PathId

    §

    fn encode<B>(&self, w: &mut B)
    where - B: BufMut,

    Append the encoding of self to the provided buffer.
    §

    impl<T> From<T> for PathId
    where - T: Into<u32>,

    §

    fn from(source: T) -> PathId

    Converts to this type from the input type.
    §

    impl Hash for PathId

    §

    fn hash<H>(&self, state: &mut H)
    where +

    Trait Implementations§

    Source§

    impl Clone for PathId

    Source§

    fn clone(&self) -> PathId

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    Source§

    impl Debug for PathId

    Source§

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

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

    impl Decodable for PathId

    Source§

    fn decode<B>(r: &mut B) -> Result<PathId, UnexpectedEnd>
    where + B: Buf,

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

    impl Default for PathId

    Source§

    fn default() -> PathId

    Returns the “default value” for a type. Read more
    Source§

    impl Display for PathId

    Source§

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

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

    impl Encodable for PathId

    Source§

    fn encode<B>(&self, w: &mut B)
    where + B: BufMut,

    Append the encoding of self to the provided buffer.
    Source§

    impl<T> From<T> for PathId
    where + T: Into<u32>,

    Source§

    fn from(source: T) -> PathId

    Converts to this type from the input type.
    Source§

    impl Hash for PathId

    Source§

    fn hash<H>(&self, state: &mut H)
    where H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · Source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl Ord for PathId

    §

    fn cmp(&self, other: &PathId) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · Source§

    fn max(self, other: Self) -> Self
    where + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    Source§

    impl Ord for PathId

    Source§

    fn cmp(&self, other: &PathId) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · Source§

    fn max(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · Source§

    fn min(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · Source§

    fn clamp(self, min: Self, max: Self) -> Self
    where - Self: Sized,

    Restrict a value to a certain interval. Read more
    §

    impl PartialEq for PathId

    §

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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.
    §

    impl PartialOrd for PathId

    §

    fn partial_cmp(&self, other: &PathId) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · Source§

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

    Tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · Source§

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

    Tests less than or equal to (for self and other) and is used by the + Self: Sized,

    Restrict a value to a certain interval. Read more
    Source§

    impl PartialEq for PathId

    Source§

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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 PartialOrd for PathId

    Source§

    fn partial_cmp(&self, other: &PathId) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · Source§

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

    Tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · Source§

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

    Tests less than or equal to (for self and other) and is used by the <= operator. Read more
    1.0.0 · Source§

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

    Tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · Source§

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

    Tests greater than or equal to (for self and other) and is used by -the >= operator. Read more
    §

    impl Copy for PathId

    §

    impl Eq for PathId

    §

    impl IdentityHashable for PathId

    §

    impl StructuralPartialEq for PathId

    Auto Trait Implementations§

    §

    impl Freeze for PathId

    §

    impl RefUnwindSafe for PathId

    §

    impl Send for PathId

    §

    impl Sync for PathId

    §

    impl Unpin for PathId

    §

    impl UnwindSafe for PathId

    Blanket Implementations§

    Source§

    impl<T> Any for T
    where +the >= operator. Read more

    Source§

    impl Copy for PathId

    Source§

    impl Eq for PathId

    Source§

    impl IdentityHashable for PathId

    Source§

    impl StructuralPartialEq for PathId

    Auto Trait Implementations§

    §

    impl Freeze for PathId

    §

    impl RefUnwindSafe for PathId

    §

    impl Send for PathId

    §

    impl Sync for PathId

    §

    impl Unpin for PathId

    §

    impl UnwindSafe for PathId

    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 diff --git a/pr/547/docs/noq/struct.PathStats.html b/pr/547/docs/noq/struct.PathStats.html index bbc7f2c09..0a167df85 100644 --- a/pr/547/docs/noq/struct.PathStats.html +++ b/pr/547/docs/noq/struct.PathStats.html @@ -1,4 +1,4 @@ -PathStats in noq - Rust

    PathStats

    Struct PathStats 

    #[non_exhaustive]
    pub struct PathStats {
    Show 13 fields +PathStats in noq - Rust

    PathStats

    Struct PathStats 

    Source
    #[non_exhaustive]
    pub struct PathStats {
    Show 13 fields pub rtt: Duration, pub udp_tx: UdpStats, pub udp_rx: UdpStats, @@ -28,8 +28,8 @@

    These are not included in Self::lost_packets and Self::lost_bytes.

    §black_holes_detected: u64

    The number of times a black hole was detected in the path.

    §current_mtu: u16

    Largest UDP payload size the path currently supports.

    -

    Trait Implementations§

    §

    impl Add<PathStats> for ConnectionStats

    §

    type Output = ConnectionStats

    The resulting type after applying the + operator.
    §

    fn add(self, rhs: PathStats) -> <ConnectionStats as Add<PathStats>>::Output

    Performs the + operation. Read more
    §

    impl AddAssign<PathStats> for ConnectionStats

    §

    fn add_assign(&mut self, rhs: PathStats)

    Performs the += operation. Read more
    §

    impl Clone for PathStats

    §

    fn clone(&self) -> PathStats

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for PathStats

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Default for PathStats

    §

    fn default() -> PathStats

    Returns the “default value” for a type. Read more
    §

    impl PartialEq for PathStats

    §

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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.
    §

    impl Copy for PathStats

    §

    impl Eq for PathStats

    §

    impl StructuralPartialEq for PathStats

    Auto Trait Implementations§

    Blanket Implementations§

    Source§

    impl<T> Any for T
    where +

    Trait Implementations§

    Source§

    impl Add<PathStats> for ConnectionStats

    Source§

    type Output = ConnectionStats

    The resulting type after applying the + operator.
    Source§

    fn add(self, rhs: PathStats) -> <ConnectionStats as Add<PathStats>>::Output

    Performs the + operation. Read more
    Source§

    impl AddAssign<PathStats> for ConnectionStats

    Source§

    fn add_assign(&mut self, rhs: PathStats)

    Performs the += operation. Read more
    Source§

    impl Clone for PathStats

    Source§

    fn clone(&self) -> PathStats

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    Source§

    impl Debug for PathStats

    Source§

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

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

    impl Default for PathStats

    Source§

    fn default() -> PathStats

    Returns the “default value” for a type. Read more
    Source§

    impl PartialEq for PathStats

    Source§

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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 Copy for PathStats

    Source§

    impl Eq for PathStats

    Source§

    impl StructuralPartialEq for PathStats

    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 diff --git a/pr/547/docs/noq/struct.QlogConfig.html b/pr/547/docs/noq/struct.QlogConfig.html index 585c4fba0..5196e362e 100644 --- a/pr/547/docs/noq/struct.QlogConfig.html +++ b/pr/547/docs/noq/struct.QlogConfig.html @@ -1,12 +1,12 @@ -QlogConfig in noq - Rust

    QlogConfig

    Struct QlogConfig 

    pub struct QlogConfig { /* private fields */ }
    Expand description

    Configuration for qlog trace logging.

    +QlogConfig in noq - Rust

    QlogConfig

    Struct QlogConfig 

    Source
    pub struct QlogConfig { /* private fields */ }
    Expand description

    Configuration for qlog trace logging.

    This struct is returned from QlogFactory::for_connection if qlog logging should be enabled for a connection. It allows to set metadata for the qlog trace.

    The trace will be written to the provided writer in the [JSON-SEQ format] defined in the qlog spec.

    JSON-SEQ format

    -

    Implementations§

    §

    impl QlogConfig

    pub fn new(writer: Box<dyn Write + Send + Sync>) -> QlogConfig

    Creates a new QlogConfig that writes a qlog trace to the specified writer.

    -

    pub fn title(&mut self, title: Option<String>) -> &mut QlogConfig

    Title to record in the qlog capture

    -

    pub fn description(&mut self, description: Option<String>) -> &mut QlogConfig

    Description to record in the qlog capture

    -

    pub fn start_time(&mut self, start_time: Instant) -> &mut QlogConfig

    Epoch qlog event times are recorded relative to

    +

    Implementations§

    Source§

    impl QlogConfig

    Source

    pub fn new(writer: Box<dyn Write + Send + Sync>) -> QlogConfig

    Creates a new QlogConfig that writes a qlog trace to the specified writer.

    +
    Source

    pub fn title(&mut self, title: Option<String>) -> &mut QlogConfig

    Title to record in the qlog capture

    +
    Source

    pub fn description(&mut self, description: Option<String>) -> &mut QlogConfig

    Description to record in the qlog capture

    +
    Source

    pub fn start_time(&mut self, start_time: Instant) -> &mut QlogConfig

    Epoch qlog event times are recorded relative to

    If unset, the start of the connection is used.

    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 diff --git a/pr/547/docs/noq/struct.QlogFileFactory.html b/pr/547/docs/noq/struct.QlogFileFactory.html index a7b6aeb6a..8b399cd24 100644 --- a/pr/547/docs/noq/struct.QlogFileFactory.html +++ b/pr/547/docs/noq/struct.QlogFileFactory.html @@ -1,13 +1,13 @@ -QlogFileFactory in noq - Rust

    QlogFileFactory

    Struct QlogFileFactory 

    pub struct QlogFileFactory { /* private fields */ }
    Expand description

    Enables writing qlog traces to a directory.

    -

    Implementations§

    §

    impl QlogFileFactory

    pub fn new(dir: PathBuf) -> QlogFileFactory

    Creates a new qlog factory that writes files into the specified directory.

    -

    pub fn from_env() -> QlogFileFactory

    Creates a new qlog factory that writes files into QLOGDIR, if set.

    +QlogFileFactory in noq - Rust

    QlogFileFactory

    Struct QlogFileFactory 

    Source
    pub struct QlogFileFactory { /* private fields */ }
    Expand description

    Enables writing qlog traces to a directory.

    +

    Implementations§

    Source§

    impl QlogFileFactory

    Source

    pub fn new(dir: PathBuf) -> QlogFileFactory

    Creates a new qlog factory that writes files into the specified directory.

    +
    Source

    pub fn from_env() -> QlogFileFactory

    Creates a new qlog factory that writes files into QLOGDIR, if set.

    If the environment variable QLOGDIR is set, qlog traces for all connections handled by this endpoint will be written into that directory. If the directory doesn’t exist it will be created.

    -

    pub fn with_prefix(self, prefix: impl ToString) -> QlogFileFactory

    Sets a prefix to the filename of the generated files.

    -

    pub fn with_start_instant(self, start: Instant) -> QlogFileFactory

    Override the instant relative to which all events are recorded.

    +
    Source

    pub fn with_prefix(self, prefix: impl ToString) -> QlogFileFactory

    Sets a prefix to the filename of the generated files.

    +
    Source

    pub fn with_start_instant(self, start: Instant) -> QlogFileFactory

    Override the instant relative to which all events are recorded.

    If not set, events will be recorded relative to the start of the connection.

    -

    Trait Implementations§

    §

    impl Debug for QlogFileFactory

    §

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

    Formats the value using the given formatter. Read more
    §

    impl QlogFactory for QlogFileFactory

    Trait Implementations§

    Source§

    impl Debug for QlogFileFactory

    Source§

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

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

    impl QlogFactory for QlogFileFactory

    Source§

    fn for_connection( &self, side: Side, _remote: SocketAddr, diff --git a/pr/547/docs/noq/struct.ServerConfig.html b/pr/547/docs/noq/struct.ServerConfig.html index 3d5b89606..58897f301 100644 --- a/pr/547/docs/noq/struct.ServerConfig.html +++ b/pr/547/docs/noq/struct.ServerConfig.html @@ -1,4 +1,4 @@ -ServerConfig in noq - Rust

    ServerConfig

    Struct ServerConfig 

    pub struct ServerConfig {
    +ServerConfig in noq - Rust

    ServerConfig

    Struct ServerConfig 

    Source
    pub struct ServerConfig {
         pub transport: Arc<TransportConfig>,
         pub crypto: Arc<dyn ServerConfig>,
         pub validation_token: ValidationTokenConfig,
    @@ -9,39 +9,39 @@
     
    §crypto: Arc<dyn ServerConfig>

    TLS configuration used for incoming connections

    Must be set to use TLS 1.3 only.

    §validation_token: ValidationTokenConfig

    Configuration for sending and handling validation tokens

    -

    Implementations§

    §

    impl ServerConfig

    pub fn new( +

    Implementations§

    Source§

    impl ServerConfig

    Source

    pub fn new( crypto: Arc<dyn ServerConfig>, token_key: Arc<dyn HandshakeTokenKey>, ) -> ServerConfig

    Create a default config with a particular handshake token key

    -

    pub fn transport_config( +

    Source

    pub fn transport_config( &mut self, transport: Arc<TransportConfig>, ) -> &mut ServerConfig

    Set a custom TransportConfig

    -

    pub fn validation_token_config( +

    Source

    pub fn validation_token_config( &mut self, validation_token: ValidationTokenConfig, ) -> &mut ServerConfig

    Set a custom ValidationTokenConfig

    -

    pub fn token_key( +

    Source

    pub fn token_key( &mut self, value: Arc<dyn HandshakeTokenKey>, ) -> &mut ServerConfig

    Private key used to authenticate data included in handshake tokens

    -

    pub fn retry_token_lifetime(&mut self, value: Duration) -> &mut ServerConfig

    Duration after a retry token was issued for which it’s considered valid

    +
    Source

    pub fn retry_token_lifetime(&mut self, value: Duration) -> &mut ServerConfig

    Duration after a retry token was issued for which it’s considered valid

    Defaults to 15 seconds.

    -

    pub fn migration(&mut self, value: bool) -> &mut ServerConfig

    Whether to allow clients to migrate to new addresses

    +
    Source

    pub fn migration(&mut self, value: bool) -> &mut ServerConfig

    Whether to allow clients to migrate to new addresses

    Improves behavior for clients that move between different internet connections or suffer NAT rebinding. Enabled by default.

    -

    pub fn preferred_address_v4( +

    Source

    pub fn preferred_address_v4( &mut self, address: Option<SocketAddrV4>, ) -> &mut ServerConfig

    The preferred IPv4 address that will be communicated to clients during handshaking

    If the client is able to reach this address, it will switch to it.

    -

    pub fn preferred_address_v6( +

    Source

    pub fn preferred_address_v6( &mut self, address: Option<SocketAddrV6>, ) -> &mut ServerConfig

    The preferred IPv6 address that will be communicated to clients during handshaking

    If the client is able to reach this address, it will switch to it.

    -

    pub fn max_incoming(&mut self, max_incoming: usize) -> &mut ServerConfig

    Maximum number of [Incoming][crate::Incoming] to allow to exist at a time

    -

    An [Incoming][crate::Incoming] comes into existence when an incoming connection attempt +

    Source

    pub fn max_incoming(&mut self, max_incoming: usize) -> &mut ServerConfig

    Maximum number of Incoming to allow to exist at a time

    +

    An Incoming comes into existence when an incoming connection attempt is received and stops existing when the application either accepts it or otherwise disposes of it. While this limit is reached, new incoming connection attempts are immediately refused. Larger values have greater worst-case memory consumption, but accommodate greater @@ -49,44 +49,44 @@ application latency in handling incoming connection attempts.

    The default value is set to 65536. With a typical Ethernet MTU of 1500 bytes, this limits memory consumption from this to under 100 MiB–a generous amount that still prevents memory exhaustion in most contexts.

    -

    pub fn incoming_buffer_size( +

    Source

    pub fn incoming_buffer_size( &mut self, incoming_buffer_size: u64, -) -> &mut ServerConfig

    Maximum number of received bytes to buffer for each [Incoming][crate::Incoming]

    -

    An [Incoming][crate::Incoming] comes into existence when an incoming connection attempt +) -> &mut ServerConfig

    Maximum number of received bytes to buffer for each Incoming

    +

    An Incoming comes into existence when an incoming connection attempt is received and stops existing when the application either accepts it or otherwise disposes of it. This limit governs only packets received within that period, and does not include the first packet. Packets received in excess of this limit are dropped, which may cause 0-RTT or handshake data to have to be retransmitted.

    The default value is set to 10 MiB–an amount such that in most situations a client would not transmit that much 0-RTT data faster than the server handles the corresponding -[Incoming][crate::Incoming].

    -

    pub fn incoming_buffer_size_total( +Incoming.

    +

    Source

    pub fn incoming_buffer_size_total( &mut self, incoming_buffer_size_total: u64, -) -> &mut ServerConfig

    Maximum number of received bytes to buffer for all [Incoming][crate::Incoming] +) -> &mut ServerConfig

    Maximum number of received bytes to buffer for all Incoming collectively

    -

    An [Incoming][crate::Incoming] comes into existence when an incoming connection attempt +

    An Incoming comes into existence when an incoming connection attempt is received and stops existing when the application either accepts it or otherwise disposes of it. This limit governs only packets received within that period, and does not include the first packet. Packets received in excess of this limit are dropped, which may cause 0-RTT or handshake data to have to be retransmitted.

    The default value is set to 100 MiB–a generous amount that still prevents memory exhaustion in most contexts.

    -

    pub fn time_source( +

    Source

    pub fn time_source( &mut self, time_source: Arc<dyn TimeSource>, ) -> &mut ServerConfig

    Object to get current SystemTime

    This exists to allow system time to be mocked in tests, or wherever else desired.

    Defaults to StdSystemTime, which simply calls SystemTime::now().

    -
    §

    impl ServerConfig

    Source§

    impl ServerConfig

    Source

    pub fn with_single_cert( cert_chain: Vec<CertificateDer<'static>>, key: PrivateKeyDer<'static>, ) -> Result<ServerConfig, Error>

    Create a server config with the given certificate chain to be presented to clients

    Uses a randomized handshake token key.

    -
    §

    impl ServerConfig

    pub fn with_crypto(crypto: Arc<dyn ServerConfig>) -> ServerConfig

    Create a server config with the given crypto::ServerConfig

    +
    Source§

    impl ServerConfig

    Source

    pub fn with_crypto(crypto: Arc<dyn ServerConfig>) -> ServerConfig

    Create a server config with the given crypto::ServerConfig

    Uses a randomized handshake token key.

    -

    Trait Implementations§

    §

    impl Clone for ServerConfig

    §

    fn clone(&self) -> ServerConfig

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for ServerConfig

    §

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

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    Source§

    impl<T> Any for T
    where +

    Trait Implementations§

    Source§

    impl Clone for ServerConfig

    Source§

    fn clone(&self) -> ServerConfig

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    Source§

    impl Debug for ServerConfig

    Source§

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

    Formats the value using the given formatter. Read more

    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 diff --git a/pr/547/docs/noq/struct.StdSystemTime.html b/pr/547/docs/noq/struct.StdSystemTime.html index 5f058c581..e05944e7b 100644 --- a/pr/547/docs/noq/struct.StdSystemTime.html +++ b/pr/547/docs/noq/struct.StdSystemTime.html @@ -1,6 +1,6 @@ -StdSystemTime in noq - Rust

    StdSystemTime

    Struct StdSystemTime 

    pub struct StdSystemTime;
    Expand description

    Default implementation of TimeSource

    +StdSystemTime in noq - Rust

    StdSystemTime

    Struct StdSystemTime 

    Source
    pub struct StdSystemTime;
    Expand description

    Default implementation of TimeSource

    Implements now by calling SystemTime::now().

    -

    Trait Implementations§

    §

    impl TimeSource for StdSystemTime

    §

    fn now(&self) -> SystemTime

    Get SystemTime::now() or the mocked equivalent

    Auto Trait Implementations§

    Blanket Implementations§

    Source§

    impl<T> Any for T
    where +

    Trait Implementations§

    Source§

    impl TimeSource for StdSystemTime

    Source§

    fn now(&self) -> SystemTime

    Get SystemTime::now() or the mocked equivalent

    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> From<T> for T

    Source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/pr/547/docs/noq/struct.StreamId.html b/pr/547/docs/noq/struct.StreamId.html index e19f72a09..65302a06e 100644 --- a/pr/547/docs/noq/struct.StreamId.html +++ b/pr/547/docs/noq/struct.StreamId.html @@ -1,26 +1,26 @@ -StreamId in noq - Rust

    StreamId

    Struct StreamId 

    pub struct StreamId(/* private fields */);
    Expand description

    Identifier for a stream within a particular connection

    -

    Implementations§

    §

    impl StreamId

    pub fn new(initiator: Side, dir: Dir, index: u64) -> StreamId

    Create a new StreamId

    -

    pub fn initiator(self) -> Side

    Which side of a connection initiated the stream

    -

    pub fn dir(self) -> Dir

    Which directions data flows in

    -

    pub fn index(self) -> u64

    Distinguishes streams of the same initiator and directionality

    -

    Trait Implementations§

    §

    impl<'arbitrary> Arbitrary<'arbitrary> for StreamId

    §

    fn arbitrary(u: &mut Unstructured<'arbitrary>) -> Result<StreamId, Error>

    Generate an arbitrary value of Self from the given unstructured data. Read more
    §

    fn arbitrary_take_rest(u: Unstructured<'a>) -> Result<Self, Error>

    Generate an arbitrary value of Self from the entirety of the given +StreamId in noq - Rust

    StreamId

    Struct StreamId 

    Source
    pub struct StreamId(/* private fields */);
    Expand description

    Identifier for a stream within a particular connection

    +

    Implementations§

    Source§

    impl StreamId

    Source

    pub fn new(initiator: Side, dir: Dir, index: u64) -> StreamId

    Create a new StreamId

    +
    Source

    pub fn initiator(self) -> Side

    Which side of a connection initiated the stream

    +
    Source

    pub fn dir(self) -> Dir

    Which directions data flows in

    +
    Source

    pub fn index(self) -> u64

    Distinguishes streams of the same initiator and directionality

    +

    Trait Implementations§

    Source§

    impl<'arbitrary> Arbitrary<'arbitrary> for StreamId

    Source§

    fn arbitrary(u: &mut Unstructured<'arbitrary>) -> Result<StreamId, Error>

    Generate an arbitrary value of Self from the given unstructured data. Read more
    §

    fn arbitrary_take_rest(u: Unstructured<'a>) -> Result<Self, Error>

    Generate an arbitrary value of Self from the entirety of the given unstructured data. Read more
    §

    fn size_hint(depth: usize) -> (usize, Option<usize>)

    Get a size hint for how many bytes out of an Unstructured this type needs to construct itself. Read more
    §

    fn try_size_hint( depth: usize, ) -> Result<(usize, Option<usize>), MaxRecursionReached>

    Get a size hint for how many bytes out of an Unstructured this type -needs to construct itself. Read more
    §

    impl Clone for StreamId

    §

    fn clone(&self) -> StreamId

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for StreamId

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Decodable for StreamId

    §

    fn decode<B>(buf: &mut B) -> Result<StreamId, UnexpectedEnd>
    where - B: Buf,

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

    impl Display for StreamId

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Encodable for StreamId

    §

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

    Append the encoding of self to the provided buffer.
    §

    impl From<StreamId> for VarInt

    §

    fn from(x: StreamId) -> VarInt

    Converts to this type from the input type.
    §

    impl From<VarInt> for StreamId

    §

    fn from(v: VarInt) -> StreamId

    Converts to this type from the input type.
    §

    impl Hash for StreamId

    §

    fn hash<__H>(&self, state: &mut __H)
    where +needs to construct itself. Read more

    Source§

    impl Clone for StreamId

    Source§

    fn clone(&self) -> StreamId

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    Source§

    impl Debug for StreamId

    Source§

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

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

    impl Decodable for StreamId

    Source§

    fn decode<B>(buf: &mut B) -> Result<StreamId, UnexpectedEnd>
    where + B: Buf,

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

    impl Display for StreamId

    Source§

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

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

    impl Encodable for StreamId

    Source§

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

    Append the encoding of self to the provided buffer.
    Source§

    impl From<StreamId> for VarInt

    Source§

    fn from(x: StreamId) -> VarInt

    Converts to this type from the input type.
    Source§

    impl From<VarInt> for StreamId

    Source§

    fn from(v: VarInt) -> StreamId

    Converts to this type from the input type.
    Source§

    impl Hash for StreamId

    Source§

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · Source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl Ord for StreamId

    §

    fn cmp(&self, other: &StreamId) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · Source§

    fn max(self, other: Self) -> Self
    where + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    Source§

    impl Ord for StreamId

    Source§

    fn cmp(&self, other: &StreamId) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · Source§

    fn max(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · Source§

    fn min(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · Source§

    fn clamp(self, min: Self, max: Self) -> Self
    where - Self: Sized,

    Restrict a value to a certain interval. Read more
    §

    impl PartialEq for StreamId

    §

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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.
    §

    impl PartialOrd for StreamId

    §

    fn partial_cmp(&self, other: &StreamId) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · Source§

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

    Tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · Source§

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

    Tests less than or equal to (for self and other) and is used by the + Self: Sized,

    Restrict a value to a certain interval. Read more

    Source§

    impl PartialEq for StreamId

    Source§

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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 PartialOrd for StreamId

    Source§

    fn partial_cmp(&self, other: &StreamId) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · Source§

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

    Tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · Source§

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

    Tests less than or equal to (for self and other) and is used by the <= operator. Read more
    1.0.0 · Source§

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

    Tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · Source§

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

    Tests greater than or equal to (for self and other) and is used by -the >= operator. Read more
    §

    impl Copy for StreamId

    §

    impl Eq for StreamId

    §

    impl StructuralPartialEq for StreamId

    Auto Trait Implementations§

    Blanket Implementations§

    Source§

    impl<T> Any for T
    where +the >= operator. Read more

    Source§

    impl Copy for StreamId

    Source§

    impl Eq for StreamId

    Source§

    impl StructuralPartialEq for StreamId

    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 diff --git a/pr/547/docs/noq/struct.TokenMemoryCache.html b/pr/547/docs/noq/struct.TokenMemoryCache.html index 48163a37f..6caa3cf45 100644 --- a/pr/547/docs/noq/struct.TokenMemoryCache.html +++ b/pr/547/docs/noq/struct.TokenMemoryCache.html @@ -1,11 +1,11 @@ -TokenMemoryCache in noq - Rust

    TokenMemoryCache

    Struct TokenMemoryCache 

    pub struct TokenMemoryCache(/* private fields */);
    Expand description

    TokenStore implementation that stores up to N tokens per server name for up to a +TokenMemoryCache in noq - Rust

    TokenMemoryCache

    Struct TokenMemoryCache 

    Source
    pub struct TokenMemoryCache(/* private fields */);
    Expand description

    TokenStore implementation that stores up to N tokens per server name for up to a limited number of server names, in-memory

    -

    Implementations§

    §

    impl TokenMemoryCache

    pub fn new( +

    Implementations§

    Source§

    impl TokenMemoryCache

    Source

    pub fn new( max_server_names: u32, max_tokens_per_server: usize, ) -> TokenMemoryCache

    Construct empty

    -

    Trait Implementations§

    §

    impl Debug for TokenMemoryCache

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Default for TokenMemoryCache

    Defaults to a maximum of 256 servers and 2 tokens per server

    -
    §

    fn default() -> TokenMemoryCache

    Returns the “default value” for a type. Read more
    §

    impl TokenStore for TokenMemoryCache

    §

    fn insert(&self, server_name: &str, token: Bytes)

    Potentially store a token for later one-time use Read more
    §

    fn take(&self, server_name: &str) -> Option<Bytes>

    Try to find and take a token that was stored with the given server name Read more

    Auto Trait Implementations§

    Blanket Implementations§

    Source§

    impl<T> Any for T
    where +

    Trait Implementations§

    Source§

    impl Debug for TokenMemoryCache

    Source§

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

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

    impl Default for TokenMemoryCache

    Defaults to a maximum of 256 servers and 2 tokens per server

    +
    Source§

    fn default() -> TokenMemoryCache

    Returns the “default value” for a type. Read more
    Source§

    impl TokenStore for TokenMemoryCache

    Source§

    fn insert(&self, server_name: &str, token: Bytes)

    Potentially store a token for later one-time use Read more
    Source§

    fn take(&self, server_name: &str) -> Option<Bytes>

    Try to find and take a token that was stored with the given server name Read more

    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> From<T> for T

    Source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/pr/547/docs/noq/struct.TokenReuseError.html b/pr/547/docs/noq/struct.TokenReuseError.html index 44648e5cd..671777fd3 100644 --- a/pr/547/docs/noq/struct.TokenReuseError.html +++ b/pr/547/docs/noq/struct.TokenReuseError.html @@ -1,4 +1,4 @@ -TokenReuseError in noq - Rust

    TokenReuseError

    Struct TokenReuseError 

    pub struct TokenReuseError;
    Expand description

    Error for when a validation token may have been reused

    +TokenReuseError in noq - Rust

    TokenReuseError

    Struct TokenReuseError 

    Source
    pub struct TokenReuseError;
    Expand description

    Error for when a validation token may have been reused

    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 diff --git a/pr/547/docs/noq/struct.Transmit.html b/pr/547/docs/noq/struct.Transmit.html index 6f6043eed..f9d06ac01 100644 --- a/pr/547/docs/noq/struct.Transmit.html +++ b/pr/547/docs/noq/struct.Transmit.html @@ -1,4 +1,4 @@ -Transmit in noq - Rust

    Transmit

    Struct Transmit 

    pub struct Transmit {
    +Transmit in noq - Rust

    Transmit

    Struct Transmit 

    Source
    pub struct Transmit {
         pub destination: SocketAddr,
         pub ecn: Option<EcnCodepoint>,
         pub size: usize,
    @@ -11,7 +11,7 @@
     
    §segment_size: Option<usize>

    The segment size if this transmission contains multiple datagrams. This is None if the transmit only contains a single datagram

    §src_ip: Option<IpAddr>

    Optional source IP address for the datagram

    -

    Trait Implementations§

    §

    impl Debug for Transmit

    §

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

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    Source§

    impl<T> Any for T
    where +

    Trait Implementations§

    Source§

    impl Debug for Transmit

    Source§

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

    Formats the value using the given formatter. Read more

    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> From<T> for T

    Source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/pr/547/docs/noq/struct.TransportConfig.html b/pr/547/docs/noq/struct.TransportConfig.html index 6487fdce3..363483ef1 100644 --- a/pr/547/docs/noq/struct.TransportConfig.html +++ b/pr/547/docs/noq/struct.TransportConfig.html @@ -1,4 +1,4 @@ -TransportConfig in noq - Rust

    TransportConfig

    Struct TransportConfig 

    pub struct TransportConfig { /* private fields */ }
    Expand description

    Parameters governing the core QUIC state machine

    +TransportConfig in noq - Rust

    TransportConfig

    Struct TransportConfig 

    Source
    pub struct TransportConfig { /* private fields */ }
    Expand description

    Parameters governing the core QUIC state machine

    Default values should be suitable for most internet applications. Applications protocols which forbid remotely-initiated streams should set max_concurrent_bidi_streams and max_concurrent_uni_streams to zero.

    @@ -8,17 +8,17 @@ tuned for a particular expected round trip time, link capacity, and memory avail for higher bandwidths and latencies increases worst-case memory consumption, but does not impair performance at lower bandwidths and latencies. The default configuration is tuned for a 100Mbps link with a 100ms round trip time.

    -

    Implementations§

    §

    impl TransportConfig

    Implementations§

    Source§

    impl TransportConfig

    Source

    pub fn max_concurrent_bidi_streams( &mut self, value: VarInt, ) -> &mut TransportConfig

    Maximum number of incoming bidirectional streams that may be open concurrently

    Must be nonzero for the peer to open any bidirectional streams.

    Worst-case memory use is directly proportional to max_concurrent_bidi_streams * stream_receive_window, with an upper bound proportional to receive_window.

    -

    pub fn max_concurrent_uni_streams( +

    Source

    pub fn max_concurrent_uni_streams( &mut self, value: VarInt, ) -> &mut TransportConfig

    Variant of max_concurrent_bidi_streams affecting unidirectional streams

    -

    pub fn max_idle_timeout( +

    Source

    pub fn max_idle_timeout( &mut self, value: Option<IdleTimeout>, ) -> &mut TransportConfig

    Maximum duration of inactivity to accept before timing out the connection.

    @@ -33,43 +33,43 @@ idle timeout can result in permanently hung futures!

    config.max_idle_timeout(Some(VarInt::from_u32(10_000).into())); // Set the idle timeout as a `Duration` -config.max_idle_timeout(Some(Duration::from_secs(10).try_into()?));

    pub fn stream_receive_window(&mut self, value: VarInt) -> &mut TransportConfig

    Maximum number of bytes the peer may transmit without acknowledgement on any one stream +config.max_idle_timeout(Some(Duration::from_secs(10).try_into()?));

    Source

    pub fn stream_receive_window(&mut self, value: VarInt) -> &mut TransportConfig

    Maximum number of bytes the peer may transmit without acknowledgement on any one stream before becoming blocked.

    This should be set to at least the expected connection latency multiplied by the maximum desired throughput. Setting this smaller than receive_window helps ensure that a single stream doesn’t monopolize receive buffers, which may otherwise occur if the application chooses not to read from a large stream for a time while still requiring data on other streams.

    -

    pub fn receive_window(&mut self, value: VarInt) -> &mut TransportConfig

    Maximum number of bytes the peer may transmit across all streams of a connection before +

    Source

    pub fn receive_window(&mut self, value: VarInt) -> &mut TransportConfig

    Maximum number of bytes the peer may transmit across all streams of a connection before becoming blocked.

    This should be set to at least the expected connection latency multiplied by the maximum desired throughput. Larger values can be useful to allow maximum throughput within a stream while another is blocked.

    -

    pub fn send_window(&mut self, value: u64) -> &mut TransportConfig

    Maximum number of bytes to transmit to a peer without acknowledgment

    +
    Source

    pub fn send_window(&mut self, value: u64) -> &mut TransportConfig

    Maximum number of bytes to transmit to a peer without acknowledgment

    Provides an upper bound on memory when communicating with peers that issue large amounts of flow control credit. Endpoints that wish to handle large numbers of connections robustly should take care to set this low enough to guarantee memory exhaustion does not occur if every connection uses the entire window.

    -

    pub fn send_fairness(&mut self, value: bool) -> &mut TransportConfig

    Whether to implement fair queuing for send streams having the same priority.

    +
    Source

    pub fn send_fairness(&mut self, value: bool) -> &mut TransportConfig

    Whether to implement fair queuing for send streams having the same priority.

    When enabled, connections schedule data from outgoing streams having the same priority in a round-robin fashion. When disabled, streams are scheduled in the order they are written to.

    Note that this only affects streams with the same priority. Higher priority streams always take precedence over lower priority streams.

    Disabling fairness can reduce fragmentation and protocol overhead for workloads that use many small streams.

    -

    pub fn packet_threshold(&mut self, value: u32) -> &mut TransportConfig

    Maximum reordering in packet number space before FACK style loss detection considers a +

    Source

    pub fn packet_threshold(&mut self, value: u32) -> &mut TransportConfig

    Maximum reordering in packet number space before FACK style loss detection considers a packet lost. Should not be less than 3, per RFC5681.

    -

    pub fn time_threshold(&mut self, value: f32) -> &mut TransportConfig

    Maximum reordering in time space before time based loss detection considers a packet lost, +

    Source

    pub fn time_threshold(&mut self, value: f32) -> &mut TransportConfig

    Maximum reordering in time space before time based loss detection considers a packet lost, as a factor of RTT

    -

    pub fn initial_rtt(&mut self, value: Duration) -> &mut TransportConfig

    The RTT used before an RTT sample is taken

    -

    pub fn initial_mtu(&mut self, value: u16) -> &mut TransportConfig

    The initial value to be used as the maximum UDP payload size before running MTU discovery +

    Source

    pub fn initial_rtt(&mut self, value: Duration) -> &mut TransportConfig

    The RTT used before an RTT sample is taken

    +
    Source

    pub fn initial_mtu(&mut self, value: u16) -> &mut TransportConfig

    The initial value to be used as the maximum UDP payload size before running MTU discovery (see TransportConfig::mtu_discovery_config).

    Must be at least 1200, which is the default, and known to be safe for typical internet applications. Larger values are more efficient, but increase the risk of packet loss due to exceeding the network path’s IP MTU. If the provided value is higher than what the network path actually supports, packet loss will eventually trigger black hole detection and bring it down to TransportConfig::min_mtu.

    -

    pub fn min_mtu(&mut self, value: u16) -> &mut TransportConfig

    The maximum UDP payload size guaranteed to be supported by the network.

    +
    Source

    pub fn min_mtu(&mut self, value: u16) -> &mut TransportConfig

    The maximum UDP payload size guaranteed to be supported by the network.

    Must be at least 1200, which is the default, and lower than or equal to TransportConfig::initial_mtu.

    Real-world MTUs can vary according to ISP, VPN, and properties of intermediate network links @@ -80,19 +80,19 @@ catastrophic packet loss, without a possibility of repair. Prefer TransportConfig::initial_mtu together with TransportConfig::mtu_discovery_config to set a maximum UDP payload size that robustly adapts to the network.

    -

    pub fn mtu_discovery_config( +

    Source

    pub fn mtu_discovery_config( &mut self, value: Option<MtuDiscoveryConfig>, ) -> &mut TransportConfig

    Specifies the MTU discovery config (see MtuDiscoveryConfig for details).

    Enabled by default.

    -

    pub fn pad_to_mtu(&mut self, value: bool) -> &mut TransportConfig

    Pad UDP datagrams carrying application data to current maximum UDP payload size

    +
    Source

    pub fn pad_to_mtu(&mut self, value: bool) -> &mut TransportConfig

    Pad UDP datagrams carrying application data to current maximum UDP payload size

    Disabled by default. UDP datagrams containing loss probes are exempt from padding.

    Enabling this helps mitigate traffic analysis by network observers, but it increases bandwidth usage. Without this mitigation precise plain text size of application datagrams as well as the total size of stream write bursts can be inferred by observers under certain conditions. This analysis requires either an uncongested connection or application datagrams too large to be coalesced.

    -

    pub fn ack_frequency_config( +

    Source

    pub fn ack_frequency_config( &mut self, value: Option<AckFrequencyConfig>, ) -> &mut TransportConfig

    Specifies the ACK frequency config (see AckFrequencyConfig for details)

    @@ -101,11 +101,11 @@ frequency QUIC extension.

    Defaults to None, which disables controlling the peer’s acknowledgement frequency. Even if set to None, the local side still supports the acknowledgement frequency QUIC extension and may use it in other ways.

    -

    pub fn persistent_congestion_threshold( +

    Source

    pub fn persistent_congestion_threshold( &mut self, value: u32, ) -> &mut TransportConfig

    Number of consecutive PTOs after which network is considered to be experiencing persistent congestion.

    -

    pub fn keep_alive_interval( +

    Source

    pub fn keep_alive_interval( &mut self, value: Option<Duration>, ) -> &mut TransportConfig

    Period of inactivity before sending a keep-alive packet

    @@ -113,11 +113,11 @@ extension and may use it in other ways.

    None to disable, which is the default. Only one side of any given connection needs keep-alive enabled for the connection to be preserved. Must be set lower than the idle_timeout of both peers to be effective.

    -

    pub fn crypto_buffer_size(&mut self, value: usize) -> &mut TransportConfig

    Maximum quantity of out-of-order crypto layer data to buffer

    -

    pub fn allow_spin(&mut self, value: bool) -> &mut TransportConfig

    Whether the implementation is permitted to set the spin bit on this connection

    +
    Source

    pub fn crypto_buffer_size(&mut self, value: usize) -> &mut TransportConfig

    Maximum quantity of out-of-order crypto layer data to buffer

    +
    Source

    pub fn allow_spin(&mut self, value: bool) -> &mut TransportConfig

    Whether the implementation is permitted to set the spin bit on this connection

    This allows passive observers to easily judge the round trip time of a connection, which can be useful for network administration but sacrifices a small amount of privacy.

    -

    pub fn datagram_receive_buffer_size( +

    Source

    pub fn datagram_receive_buffer_size( &mut self, value: Option<usize>, ) -> &mut TransportConfig

    Maximum number of incoming application datagram bytes to buffer, or None to disable @@ -125,7 +125,7 @@ incoming datagrams

    The peer is forbidden to send single datagrams larger than this size. If the aggregate size of all datagrams that have been received from the peer but not consumed by the application exceeds this value, old datagrams are dropped until it is no longer exceeded.

    -

    pub fn datagram_send_buffer_size( +

    Source

    pub fn datagram_send_buffer_size( &mut self, value: usize, ) -> &mut TransportConfig

    Maximum number of outgoing application datagram bytes to buffer

    @@ -133,7 +133,7 @@ exceeds this value, old datagrams are dropped until it is no longer exceeded.

    -

    pub fn congestion_controller_factory( +

    Source

    pub fn congestion_controller_factory( &mut self, factory: Arc<dyn ControllerFactory + Send + Sync>, ) -> &mut TransportConfig

    How to construct new congestion::Controllers

    @@ -141,7 +141,7 @@ sent, older datagrams are dropped until sufficient space is available.

    e.g. a congestion::NewRenoConfig.

    §Example
    let mut config = TransportConfig::default();
    -config.congestion_controller_factory(Arc::new(congestion::NewRenoConfig::default()));

    pub fn enable_segmentation_offload( +config.congestion_controller_factory(Arc::new(congestion::NewRenoConfig::default()));

    Source

    pub fn enable_segmentation_offload( &mut self, enabled: bool, ) -> &mut TransportConfig

    Whether to use “Generic Segmentation Offload” to accelerate transmits, when supported by the @@ -152,13 +152,13 @@ headers, such as when transmitting bulk data on a connection. However, it is not by all network interface drivers or packet inspection tools. noq-udp will attempt to disable GSO automatically when unavailable, but this can lead to spurious packet loss at startup, temporarily degrading performance.

    -

    pub fn send_observed_address_reports( +

    Source

    pub fn send_observed_address_reports( &mut self, enabled: bool, ) -> &mut TransportConfig

    Whether to send observed address reports to peers.

    This will aid peers in inferring their reachable address, which in most NATd networks will not be easily available to them.

    -

    pub fn receive_observed_address_reports( +

    Source

    pub fn receive_observed_address_reports( &mut self, enabled: bool, ) -> &mut TransportConfig

    Whether to receive observed address reports from other peers.

    @@ -166,7 +166,7 @@ will not be easily available to them.

    address reports will do so if this transport parameter is set. In general, observed address reports cannot be trusted. This, however, can aid the current endpoint in inferring its reachable address, which in most NATd networks will not be easily available.

    -

    pub fn max_concurrent_multipath_paths( +

    Source

    pub fn max_concurrent_multipath_paths( &mut self, max_concurrent: u32, ) -> &mut TransportConfig

    Enables the Multipath Extension for QUIC.

    @@ -175,16 +175,16 @@ reachable address, which in most NATd networks will not be easily available.

    The value provided specifies the number maximum number of paths this endpoint may open concurrently when multipath is negotiated. For any path to be opened, the remote must enable multipath as well.

    -

    pub fn default_path_max_idle_timeout( +

    Source

    pub fn default_path_max_idle_timeout( &mut self, timeout: Option<Duration>, ) -> &mut TransportConfig

    Sets a default per-path maximum idle timeout

    If the path is idle for this long the path will be abandoned. Bear in mind this will interact with the TransportConfig::max_idle_timeout, if the last path is abandoned the entire connection will be closed.

    -

    You can also change this using Connection::set_path_max_idle_timeout for +

    You can also change this using Connection::set_path_max_idle_timeout for existing paths.

    -

    pub fn default_path_keep_alive_interval( +

    Source

    pub fn default_path_keep_alive_interval( &mut self, interval: Option<Duration>, ) -> &mut TransportConfig

    Sets a default per-path keep alive interval

    @@ -192,9 +192,9 @@ existing paths.

    TransportConfig::keep_alive_interval. This setting will keep this path active, TransportConfig::keep_alive_interval will keep the connection active, with no control over which path is used for this.

    -

    You can also change this using Connection::set_path_keep_alive_interval for +

    You can also change this using Connection::set_path_keep_alive_interval for existing path.

    -

    pub fn set_max_remote_nat_traversal_addresses( +

    Source

    pub fn set_max_remote_nat_traversal_addresses( &mut self, max_addresses: u8, ) -> &mut TransportConfig

    Sets the maximum number of nat traversal addresses this endpoint allows the remote to @@ -205,26 +205,26 @@ the Nat Traversal Extension for QUIC, see

    This implementation expects the multipath extension to be enabled as well. if not yet enabled via Self::max_concurrent_multipath_paths, a default value of [DEFAULT_CONCURRENT_MULTIPATH_PATHS_WHEN_ENABLED] will be used.

    -

    pub fn qlog_factory( +

    Source

    pub fn qlog_factory( &mut self, factory: Arc<dyn QlogFactory>, ) -> &mut TransportConfig

    Configures qlog capturing by setting a QlogFactory.

    This assigns a QlogFactory that produces qlog capture configurations for individual connections.

    -

    pub fn qlog_from_env(&mut self, prefix: &str) -> &mut TransportConfig

    Configures qlog capturing through the QLOGDIR environment variable.

    +
    Source

    pub fn qlog_from_env(&mut self, prefix: &str) -> &mut TransportConfig

    Configures qlog capturing through the QLOGDIR environment variable.

    This uses QlogFileFactory::from_env to create a factory to write qlog traces into the directory set through the QLOGDIR environment variable.

    If QLOGDIR is not set, no traces will be written. If QLOGDIR is set to a path that does not exist, it will be created.

    The files will be prefixed with prefix.

    -

    pub fn qlog_from_path( +

    Source

    pub fn qlog_from_path( &mut self, path: impl AsRef<Path>, prefix: &str, ) -> &mut TransportConfig

    Configures qlog capturing into a directory.

    This uses QlogFileFactory to create a factory to write qlog traces into the specified directory. The files will be prefixed with prefix.

    -

    Trait Implementations§

    §

    impl Clone for TransportConfig

    §

    fn clone(&self) -> TransportConfig

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for TransportConfig

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Default for TransportConfig

    §

    fn default() -> TransportConfig

    Returns the “default value” for a type. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    Source§

    impl<T> Any for T
    where +

    Trait Implementations§

    Source§

    impl Clone for TransportConfig

    Source§

    fn clone(&self) -> TransportConfig

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    Source§

    impl Debug for TransportConfig

    Source§

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

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

    impl Default for TransportConfig

    Source§

    fn default() -> TransportConfig

    Returns the “default value” for a type. Read more

    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 diff --git a/pr/547/docs/noq/struct.TransportErrorCode.html b/pr/547/docs/noq/struct.TransportErrorCode.html index e6680a7bc..78952d263 100644 --- a/pr/547/docs/noq/struct.TransportErrorCode.html +++ b/pr/547/docs/noq/struct.TransportErrorCode.html @@ -1,30 +1,30 @@ -TransportErrorCode in noq - Rust

    TransportErrorCode

    Struct TransportErrorCode 

    pub struct TransportErrorCode(/* private fields */);
    Expand description

    Transport-level error code

    -

    Implementations§

    §

    impl Code

    pub fn crypto(code: u8) -> Code

    Create QUIC error code from TLS alert code

    -
    §

    impl Code

    pub const NO_ERROR: Code

    the connection is being closed abruptly in the absence of any error

    -

    pub const INTERNAL_ERROR: Code

    the endpoint encountered an internal error and cannot continue with the connection

    -

    pub const CONNECTION_REFUSED: Code

    the server refused to accept a new connection

    -

    pub const FLOW_CONTROL_ERROR: Code

    received more data than permitted in advertised data limits

    -

    pub const STREAM_LIMIT_ERROR: Code

    received a frame for a stream identifier that exceeded advertised the stream limit for the corresponding stream type

    -

    pub const STREAM_STATE_ERROR: Code

    received a frame for a stream that was not in a state that permitted that frame

    -

    pub const FINAL_SIZE_ERROR: Code

    received a STREAM frame or a RESET_STREAM frame containing a different final size to the one already established

    -

    pub const FRAME_ENCODING_ERROR: Code

    received a frame that was badly formatted

    -

    pub const TRANSPORT_PARAMETER_ERROR: Code

    received transport parameters that were badly formatted, included an invalid value, was absent even though it is mandatory, was present though it is forbidden, or is otherwise in error

    -

    pub const CONNECTION_ID_LIMIT_ERROR: Code

    the number of connection IDs provided by the peer exceeds the advertised active_connection_id_limit

    -

    pub const PROTOCOL_VIOLATION: Code

    detected an error with protocol compliance that was not covered by more specific error codes

    -

    pub const INVALID_TOKEN: Code

    received an invalid Retry Token in a client Initial

    -

    pub const APPLICATION_ERROR: Code

    the application or application protocol caused the connection to be closed during the handshake

    -

    pub const CRYPTO_BUFFER_EXCEEDED: Code

    received more data in CRYPTO frames than can be buffered

    -

    pub const KEY_UPDATE_ERROR: Code

    key update error

    -

    pub const AEAD_LIMIT_REACHED: Code

    the endpoint has reached the confidentiality or integrity limit for the AEAD algorithm

    -

    pub const NO_VIABLE_PATH: Code

    no viable network path exists

    -

    pub const APPLICATION_ABANDON_PATH: Code

    Path abandoned at the application’s request

    -

    pub const PATH_RESOURCE_LIMIT_REACHED: Code

    Path abandoned due to resource limitations in the transport

    -

    pub const PATH_UNSTABLE_OR_POOR: Code

    Path abandoned due to unstable interfaces

    -

    pub const NO_CID_AVAILABLE_FOR_PATH: Code

    Path abandoned due to no available connection IDs for the path

    -

    Trait Implementations§

    §

    impl Clone for Code

    §

    fn clone(&self) -> Code

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for Code

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Decodable for Code

    §

    fn decode<B>(buf: &mut B) -> Result<Code, UnexpectedEnd>
    where - B: Buf,

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

    impl Display for Code

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Encodable for Code

    §

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

    Append the encoding of self to the provided buffer.
    §

    impl From<Code> for VarInt

    §

    fn from(value: Code) -> VarInt

    Converts to this type from the input type.
    §

    impl From<VarInt> for Code

    §

    fn from(value: VarInt) -> Code

    Converts to this type from the input type.
    §

    impl PartialEq for Code

    §

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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.
    §

    impl Copy for Code

    §

    impl Eq for Code

    §

    impl StructuralPartialEq for Code

    Auto Trait Implementations§

    §

    impl Freeze for Code

    §

    impl RefUnwindSafe for Code

    §

    impl Send for Code

    §

    impl Sync for Code

    §

    impl Unpin for Code

    §

    impl UnwindSafe for Code

    Blanket Implementations§

    Source§

    impl<T> Any for T
    where +TransportErrorCode in noq - Rust

    TransportErrorCode

    Struct TransportErrorCode 

    Source
    pub struct TransportErrorCode(/* private fields */);
    Expand description

    Transport-level error code

    +

    Implementations§

    Source§

    impl Code

    Source

    pub fn crypto(code: u8) -> Code

    Create QUIC error code from TLS alert code

    +
    Source§

    impl Code

    Source

    pub const NO_ERROR: Code

    the connection is being closed abruptly in the absence of any error

    +
    Source

    pub const INTERNAL_ERROR: Code

    the endpoint encountered an internal error and cannot continue with the connection

    +
    Source

    pub const CONNECTION_REFUSED: Code

    the server refused to accept a new connection

    +
    Source

    pub const FLOW_CONTROL_ERROR: Code

    received more data than permitted in advertised data limits

    +
    Source

    pub const STREAM_LIMIT_ERROR: Code

    received a frame for a stream identifier that exceeded advertised the stream limit for the corresponding stream type

    +
    Source

    pub const STREAM_STATE_ERROR: Code

    received a frame for a stream that was not in a state that permitted that frame

    +
    Source

    pub const FINAL_SIZE_ERROR: Code

    received a STREAM frame or a RESET_STREAM frame containing a different final size to the one already established

    +
    Source

    pub const FRAME_ENCODING_ERROR: Code

    received a frame that was badly formatted

    +
    Source

    pub const TRANSPORT_PARAMETER_ERROR: Code

    received transport parameters that were badly formatted, included an invalid value, was absent even though it is mandatory, was present though it is forbidden, or is otherwise in error

    +
    Source

    pub const CONNECTION_ID_LIMIT_ERROR: Code

    the number of connection IDs provided by the peer exceeds the advertised active_connection_id_limit

    +
    Source

    pub const PROTOCOL_VIOLATION: Code

    detected an error with protocol compliance that was not covered by more specific error codes

    +
    Source

    pub const INVALID_TOKEN: Code

    received an invalid Retry Token in a client Initial

    +
    Source

    pub const APPLICATION_ERROR: Code

    the application or application protocol caused the connection to be closed during the handshake

    +
    Source

    pub const CRYPTO_BUFFER_EXCEEDED: Code

    received more data in CRYPTO frames than can be buffered

    +
    Source

    pub const KEY_UPDATE_ERROR: Code

    key update error

    +
    Source

    pub const AEAD_LIMIT_REACHED: Code

    the endpoint has reached the confidentiality or integrity limit for the AEAD algorithm

    +
    Source

    pub const NO_VIABLE_PATH: Code

    no viable network path exists

    +
    Source

    pub const APPLICATION_ABANDON_PATH: Code

    Path abandoned at the application’s request

    +
    Source

    pub const PATH_RESOURCE_LIMIT_REACHED: Code

    Path abandoned due to resource limitations in the transport

    +
    Source

    pub const PATH_UNSTABLE_OR_POOR: Code

    Path abandoned due to unstable interfaces

    +
    Source

    pub const NO_CID_AVAILABLE_FOR_PATH: Code

    Path abandoned due to no available connection IDs for the path

    +

    Trait Implementations§

    Source§

    impl Clone for Code

    Source§

    fn clone(&self) -> Code

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    Source§

    impl Debug for Code

    Source§

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

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

    impl Decodable for Code

    Source§

    fn decode<B>(buf: &mut B) -> Result<Code, UnexpectedEnd>
    where + B: Buf,

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

    impl Display for Code

    Source§

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

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

    impl Encodable for Code

    Source§

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

    Append the encoding of self to the provided buffer.
    Source§

    impl From<Code> for VarInt

    Source§

    fn from(value: Code) -> VarInt

    Converts to this type from the input type.
    Source§

    impl From<VarInt> for Code

    Source§

    fn from(value: VarInt) -> Code

    Converts to this type from the input type.
    Source§

    impl PartialEq for Code

    Source§

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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 Copy for Code

    Source§

    impl Eq for Code

    Source§

    impl StructuralPartialEq for Code

    Auto Trait Implementations§

    §

    impl Freeze for Code

    §

    impl RefUnwindSafe for Code

    §

    impl Send for Code

    §

    impl Sync for Code

    §

    impl Unpin for Code

    §

    impl UnwindSafe for Code

    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 diff --git a/pr/547/docs/noq/struct.UdpStats.html b/pr/547/docs/noq/struct.UdpStats.html index f4655db1e..e8ef7eba8 100644 --- a/pr/547/docs/noq/struct.UdpStats.html +++ b/pr/547/docs/noq/struct.UdpStats.html @@ -1,4 +1,4 @@ -UdpStats in noq - Rust

    UdpStats

    Struct UdpStats 

    #[non_exhaustive]
    pub struct UdpStats { +UdpStats in noq - Rust

    UdpStats

    Struct UdpStats 

    Source
    #[non_exhaustive]
    pub struct UdpStats { pub datagrams: u64, pub bytes: u64, pub ios: u64, @@ -9,8 +9,8 @@ on a connection.

    §bytes: u64

    The total amount of bytes which have been transferred inside UDP datagrams.

    §ios: u64

    The number of I/O operations executed.

    Can be less than datagrams when GSO, GRO, and/or batched system calls are in use.

    -

    Trait Implementations§

    §

    impl Add for UdpStats

    §

    type Output = UdpStats

    The resulting type after applying the + operator.
    §

    fn add(self, __rhs: UdpStats) -> <UdpStats as Add>::Output

    Performs the + operation. Read more
    §

    impl AddAssign for UdpStats

    §

    fn add_assign(&mut self, __rhs: UdpStats)

    Performs the += operation. Read more
    §

    impl Clone for UdpStats

    §

    fn clone(&self) -> UdpStats

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for UdpStats

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Default for UdpStats

    §

    fn default() -> UdpStats

    Returns the “default value” for a type. Read more
    §

    impl PartialEq for UdpStats

    §

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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.
    §

    impl Copy for UdpStats

    §

    impl Eq for UdpStats

    §

    impl StructuralPartialEq for UdpStats

    Auto Trait Implementations§

    Blanket Implementations§

    Source§

    impl<T> Any for T
    where +

    Trait Implementations§

    Source§

    impl Add for UdpStats

    Source§

    type Output = UdpStats

    The resulting type after applying the + operator.
    Source§

    fn add(self, __rhs: UdpStats) -> <UdpStats as Add>::Output

    Performs the + operation. Read more
    Source§

    impl AddAssign for UdpStats

    Source§

    fn add_assign(&mut self, __rhs: UdpStats)

    Performs the += operation. Read more
    Source§

    impl Clone for UdpStats

    Source§

    fn clone(&self) -> UdpStats

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    Source§

    impl Debug for UdpStats

    Source§

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

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

    impl Default for UdpStats

    Source§

    fn default() -> UdpStats

    Returns the “default value” for a type. Read more
    Source§

    impl PartialEq for UdpStats

    Source§

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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 Copy for UdpStats

    Source§

    impl Eq for UdpStats

    Source§

    impl StructuralPartialEq for UdpStats

    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 diff --git a/pr/547/docs/noq/struct.ValidationTokenConfig.html b/pr/547/docs/noq/struct.ValidationTokenConfig.html index 7282bf423..d9ef92094 100644 --- a/pr/547/docs/noq/struct.ValidationTokenConfig.html +++ b/pr/547/docs/noq/struct.ValidationTokenConfig.html @@ -1,4 +1,4 @@ -ValidationTokenConfig in noq - Rust

    ValidationTokenConfig

    Struct ValidationTokenConfig 

    pub struct ValidationTokenConfig { /* private fields */ }
    Expand description

    Configuration for sending and handling validation tokens in incoming connections

    +ValidationTokenConfig in noq - Rust

    ValidationTokenConfig

    Struct ValidationTokenConfig 

    Source
    pub struct ValidationTokenConfig { /* private fields */ }
    Expand description

    Configuration for sending and handling validation tokens in incoming connections

    Default values should be suitable for most internet applications.

    §QUIC Tokens

    The QUIC protocol defines a concept of “address validation”. Essentially, one side of a @@ -33,20 +33,20 @@ is the main situation where a server might be sending application data to an add be validated by token usage earlier than it would become validated without token usage.

    These tokens should not be confused with “stateless reset tokens,” which are similarly named but entirely unrelated.

    -

    Implementations§

    §

    impl ValidationTokenConfig

    pub fn lifetime(&mut self, value: Duration) -> &mut ValidationTokenConfig

    Duration after an address validation token was issued for which it’s considered valid

    +

    Implementations§

    Source§

    impl ValidationTokenConfig

    Source

    pub fn lifetime(&mut self, value: Duration) -> &mut ValidationTokenConfig

    Duration after an address validation token was issued for which it’s considered valid

    This refers only to tokens sent in NEW_TOKEN frames, in contrast to retry tokens.

    Defaults to 2 weeks.

    -

    pub fn log(&mut self, log: Arc<dyn TokenLog>) -> &mut ValidationTokenConfig

    Set a custom TokenLog

    +
    Source

    pub fn log(&mut self, log: Arc<dyn TokenLog>) -> &mut ValidationTokenConfig

    Set a custom TokenLog

    If the bloom feature is enabled (which it is by default), defaults to a default BloomTokenLog, which is suitable for most internet applications.

    If the bloom feature is disabled, defaults to NoneTokenLog, which makes the server ignore all address validation tokens (that is, tokens originating from NEW_TOKEN frames–retry tokens are not affected).

    -

    pub fn sent(&mut self, value: u32) -> &mut ValidationTokenConfig

    Number of address validation tokens sent to a client when its path is validated

    +
    Source

    pub fn sent(&mut self, value: u32) -> &mut ValidationTokenConfig

    Number of address validation tokens sent to a client when its path is validated

    This refers only to tokens sent in NEW_TOKEN frames, in contrast to retry tokens.

    If the bloom feature is enabled (which it is by default), defaults to 2. Otherwise, defaults to 0.

    -

    Trait Implementations§

    §

    impl Clone for ValidationTokenConfig

    §

    fn clone(&self) -> ValidationTokenConfig

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for ValidationTokenConfig

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Default for ValidationTokenConfig

    §

    fn default() -> ValidationTokenConfig

    Returns the “default value” for a type. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    Source§

    impl<T> Any for T
    where +

    Trait Implementations§

    Source§

    impl Clone for ValidationTokenConfig

    Source§

    fn clone(&self) -> ValidationTokenConfig

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    Source§

    impl Debug for ValidationTokenConfig

    Source§

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

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

    impl Default for ValidationTokenConfig

    Source§

    fn default() -> ValidationTokenConfig

    Returns the “default value” for a type. Read more

    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 diff --git a/pr/547/docs/noq/struct.VarInt.html b/pr/547/docs/noq/struct.VarInt.html index 32f20eb1d..2aa2930e0 100644 --- a/pr/547/docs/noq/struct.VarInt.html +++ b/pr/547/docs/noq/struct.VarInt.html @@ -1,36 +1,36 @@ -VarInt in noq - Rust

    VarInt

    Struct VarInt 

    pub struct VarInt(/* private fields */);
    Expand description

    An integer less than 2^62

    +VarInt in noq - Rust

    VarInt

    Struct VarInt 

    Source
    pub struct VarInt(/* private fields */);
    Expand description

    An integer less than 2^62

    Values of this type are suitable for encoding as QUIC variable-length integer.

    -

    Implementations§

    §

    impl VarInt

    pub const MAX: VarInt

    The largest representable value

    -

    pub const MAX_SIZE: usize = 8usize

    The largest encoded value length

    -

    pub const fn from_u32(x: u32) -> VarInt

    Construct a VarInt infallibly

    -

    pub fn from_u64(x: u64) -> Result<VarInt, VarIntBoundsExceeded>

    Succeeds iff x < 2^62

    -

    pub const unsafe fn from_u64_unchecked(x: u64) -> VarInt

    Create a VarInt without ensuring it’s in range

    +

    Implementations§

    Source§

    impl VarInt

    Source

    pub const MAX: VarInt

    The largest representable value

    +
    Source

    pub const MAX_SIZE: usize = 8usize

    The largest encoded value length

    +
    Source

    pub const fn from_u32(x: u32) -> VarInt

    Construct a VarInt infallibly

    +
    Source

    pub fn from_u64(x: u64) -> Result<VarInt, VarIntBoundsExceeded>

    Succeeds iff x < 2^62

    +
    Source

    pub const unsafe fn from_u64_unchecked(x: u64) -> VarInt

    Create a VarInt without ensuring it’s in range

    §Safety

    x must be less than 2^62.

    -

    pub const fn into_inner(self) -> u64

    Extract the integer value

    -

    pub fn saturating_add(self, rhs: impl Into<VarInt>) -> VarInt

    Saturating integer addition. Computes self + rhs, saturating at the numeric bounds instead +

    Source

    pub const fn into_inner(self) -> u64

    Extract the integer value

    +
    Source

    pub fn saturating_add(self, rhs: impl Into<VarInt>) -> VarInt

    Saturating integer addition. Computes self + rhs, saturating at the numeric bounds instead of overflowing.

    -

    Trait Implementations§

    §

    impl<'arbitrary> Arbitrary<'arbitrary> for VarInt

    §

    fn arbitrary(u: &mut Unstructured<'arbitrary>) -> Result<VarInt, Error>

    Generate an arbitrary value of Self from the given unstructured data. Read more
    §

    fn arbitrary_take_rest(u: Unstructured<'a>) -> Result<Self, Error>

    Generate an arbitrary value of Self from the entirety of the given +

    Trait Implementations§

    Source§

    impl<'arbitrary> Arbitrary<'arbitrary> for VarInt

    Source§

    fn arbitrary(u: &mut Unstructured<'arbitrary>) -> Result<VarInt, Error>

    Generate an arbitrary value of Self from the given unstructured data. Read more
    §

    fn arbitrary_take_rest(u: Unstructured<'a>) -> Result<Self, Error>

    Generate an arbitrary value of Self from the entirety of the given unstructured data. Read more
    §

    fn size_hint(depth: usize) -> (usize, Option<usize>)

    Get a size hint for how many bytes out of an Unstructured this type needs to construct itself. Read more
    §

    fn try_size_hint( depth: usize, ) -> Result<(usize, Option<usize>), MaxRecursionReached>

    Get a size hint for how many bytes out of an Unstructured this type -needs to construct itself. Read more
    §

    impl Clone for VarInt

    §

    fn clone(&self) -> VarInt

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for VarInt

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Decodable for VarInt

    §

    fn decode<B>(r: &mut B) -> Result<VarInt, UnexpectedEnd>
    where - B: Buf,

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

    impl Default for VarInt

    §

    fn default() -> VarInt

    Returns the “default value” for a type. Read more
    §

    impl Display for VarInt

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Encodable for VarInt

    §

    fn encode<B>(&self, w: &mut B)
    where - B: BufMut,

    Append the encoding of self to the provided buffer.
    §

    impl From<StreamId> for VarInt

    §

    fn from(x: StreamId) -> VarInt

    Converts to this type from the input type.
    §

    impl From<Code> for VarInt

    §

    fn from(value: Code) -> VarInt

    Converts to this type from the input type.
    §

    impl From<VarInt> for IdleTimeout

    §

    fn from(inner: VarInt) -> IdleTimeout

    Converts to this type from the input type.
    §

    impl From<VarInt> for StreamId

    §

    fn from(v: VarInt) -> StreamId

    Converts to this type from the input type.
    §

    impl From<VarInt> for Code

    §

    fn from(value: VarInt) -> Code

    Converts to this type from the input type.
    §

    impl From<u16> for VarInt

    §

    fn from(x: u16) -> VarInt

    Converts to this type from the input type.
    §

    impl From<u32> for VarInt

    §

    fn from(x: u32) -> VarInt

    Converts to this type from the input type.
    §

    impl From<u8> for VarInt

    §

    fn from(x: u8) -> VarInt

    Converts to this type from the input type.
    §

    impl Hash for VarInt

    §

    fn hash<__H>(&self, state: &mut __H)
    where +needs to construct itself. Read more

    Source§

    impl Clone for VarInt

    Source§

    fn clone(&self) -> VarInt

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    Source§

    impl Debug for VarInt

    Source§

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

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

    impl Decodable for VarInt

    Source§

    fn decode<B>(r: &mut B) -> Result<VarInt, UnexpectedEnd>
    where + B: Buf,

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

    impl Default for VarInt

    Source§

    fn default() -> VarInt

    Returns the “default value” for a type. Read more
    Source§

    impl Display for VarInt

    Source§

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

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

    impl Encodable for VarInt

    Source§

    fn encode<B>(&self, w: &mut B)
    where + B: BufMut,

    Append the encoding of self to the provided buffer.
    Source§

    impl From<StreamId> for VarInt

    Source§

    fn from(x: StreamId) -> VarInt

    Converts to this type from the input type.
    Source§

    impl From<Code> for VarInt

    Source§

    fn from(value: Code) -> VarInt

    Converts to this type from the input type.
    Source§

    impl From<VarInt> for IdleTimeout

    Source§

    fn from(inner: VarInt) -> IdleTimeout

    Converts to this type from the input type.
    Source§

    impl From<VarInt> for StreamId

    Source§

    fn from(v: VarInt) -> StreamId

    Converts to this type from the input type.
    Source§

    impl From<VarInt> for Code

    Source§

    fn from(value: VarInt) -> Code

    Converts to this type from the input type.
    Source§

    impl From<u16> for VarInt

    Source§

    fn from(x: u16) -> VarInt

    Converts to this type from the input type.
    Source§

    impl From<u32> for VarInt

    Source§

    fn from(x: u32) -> VarInt

    Converts to this type from the input type.
    Source§

    impl From<u8> for VarInt

    Source§

    fn from(x: u8) -> VarInt

    Converts to this type from the input type.
    Source§

    impl Hash for VarInt

    Source§

    fn hash<__H>(&self, state: &mut __H)
    where __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · Source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, - Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    §

    impl Ord for VarInt

    §

    fn cmp(&self, other: &VarInt) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · Source§

    fn max(self, other: Self) -> Self
    where + Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    Source§

    impl Ord for VarInt

    Source§

    fn cmp(&self, other: &VarInt) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · Source§

    fn max(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · Source§

    fn min(self, other: Self) -> Self
    where Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · Source§

    fn clamp(self, min: Self, max: Self) -> Self
    where - Self: Sized,

    Restrict a value to a certain interval. Read more
    §

    impl PartialEq for VarInt

    §

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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.
    §

    impl PartialOrd for VarInt

    §

    fn partial_cmp(&self, other: &VarInt) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · Source§

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

    Tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · Source§

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

    Tests less than or equal to (for self and other) and is used by the + Self: Sized,

    Restrict a value to a certain interval. Read more
    Source§

    impl PartialEq for VarInt

    Source§

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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 PartialOrd for VarInt

    Source§

    fn partial_cmp(&self, other: &VarInt) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · Source§

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

    Tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · Source§

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

    Tests less than or equal to (for self and other) and is used by the <= operator. Read more
    1.0.0 · Source§

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

    Tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · Source§

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

    Tests greater than or equal to (for self and other) and is used by -the >= operator. Read more
    §

    impl TryFrom<u128> for VarInt

    §

    fn try_from(x: u128) -> Result<VarInt, VarIntBoundsExceeded>

    Succeeds iff x < 2^62

    -
    §

    type Error = VarIntBoundsExceeded

    The type returned in the event of a conversion error.
    §

    impl TryFrom<u64> for VarInt

    §

    fn try_from(x: u64) -> Result<VarInt, VarIntBoundsExceeded>

    Succeeds iff x < 2^62

    -
    §

    type Error = VarIntBoundsExceeded

    The type returned in the event of a conversion error.
    §

    impl TryFrom<usize> for VarInt

    §

    fn try_from(x: usize) -> Result<VarInt, VarIntBoundsExceeded>

    Succeeds iff x < 2^62

    -
    §

    type Error = VarIntBoundsExceeded

    The type returned in the event of a conversion error.
    §

    impl Copy for VarInt

    §

    impl Eq for VarInt

    §

    impl StructuralPartialEq for VarInt

    Auto Trait Implementations§

    §

    impl Freeze for VarInt

    §

    impl RefUnwindSafe for VarInt

    §

    impl Send for VarInt

    §

    impl Sync for VarInt

    §

    impl Unpin for VarInt

    §

    impl UnwindSafe for VarInt

    Blanket Implementations§

    Source§

    impl<T> Any for T
    where +the >= operator. Read more

    Source§

    impl TryFrom<u128> for VarInt

    Source§

    fn try_from(x: u128) -> Result<VarInt, VarIntBoundsExceeded>

    Succeeds iff x < 2^62

    +
    Source§

    type Error = VarIntBoundsExceeded

    The type returned in the event of a conversion error.
    Source§

    impl TryFrom<u64> for VarInt

    Source§

    fn try_from(x: u64) -> Result<VarInt, VarIntBoundsExceeded>

    Succeeds iff x < 2^62

    +
    Source§

    type Error = VarIntBoundsExceeded

    The type returned in the event of a conversion error.
    Source§

    impl TryFrom<usize> for VarInt

    Source§

    fn try_from(x: usize) -> Result<VarInt, VarIntBoundsExceeded>

    Succeeds iff x < 2^62

    +
    Source§

    type Error = VarIntBoundsExceeded

    The type returned in the event of a conversion error.
    Source§

    impl Copy for VarInt

    Source§

    impl Eq for VarInt

    Source§

    impl StructuralPartialEq for VarInt

    Auto Trait Implementations§

    §

    impl Freeze for VarInt

    §

    impl RefUnwindSafe for VarInt

    §

    impl Send for VarInt

    §

    impl Sync for VarInt

    §

    impl Unpin for VarInt

    §

    impl UnwindSafe for VarInt

    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 diff --git a/pr/547/docs/noq/struct.VarIntBoundsExceeded.html b/pr/547/docs/noq/struct.VarIntBoundsExceeded.html index e1da14235..dffcca1f8 100644 --- a/pr/547/docs/noq/struct.VarIntBoundsExceeded.html +++ b/pr/547/docs/noq/struct.VarIntBoundsExceeded.html @@ -1,6 +1,6 @@ -VarIntBoundsExceeded in noq - Rust

    VarIntBoundsExceeded

    Struct VarIntBoundsExceeded 

    pub struct VarIntBoundsExceeded;
    Expand description

    Error returned when constructing a VarInt from a value >= 2^62

    -

    Trait Implementations§

    §

    impl Clone for VarIntBoundsExceeded

    §

    fn clone(&self) -> VarIntBoundsExceeded

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for VarIntBoundsExceeded

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Display for VarIntBoundsExceeded

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Error for VarIntBoundsExceeded

    1.30.0 · Source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    Returns the lower-level source of this error, if any. Read more
    1.0.0 · Source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · Source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    Source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type-based access to context intended for error reports. Read more
    §

    impl From<VarIntBoundsExceeded> for ConfigError

    §

    fn from(_: VarIntBoundsExceeded) -> ConfigError

    Converts to this type from the input type.
    §

    impl PartialEq for VarIntBoundsExceeded

    §

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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.
    §

    impl Copy for VarIntBoundsExceeded

    §

    impl Eq for VarIntBoundsExceeded

    §

    impl StructuralPartialEq for VarIntBoundsExceeded

    Auto Trait Implementations§

    Blanket Implementations§

    Source§

    impl<T> Any for T
    where +VarIntBoundsExceeded in noq - Rust

    VarIntBoundsExceeded

    Struct VarIntBoundsExceeded 

    Source
    pub struct VarIntBoundsExceeded;
    Expand description

    Error returned when constructing a VarInt from a value >= 2^62

    +

    Trait Implementations§

    Source§

    impl Clone for VarIntBoundsExceeded

    Source§

    fn clone(&self) -> VarIntBoundsExceeded

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    Source§

    impl Debug for VarIntBoundsExceeded

    Source§

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

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

    impl Display for VarIntBoundsExceeded

    Source§

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

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

    impl Error for VarIntBoundsExceeded

    1.30.0 · Source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    Returns the lower-level source of this error, if any. Read more
    1.0.0 · Source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · Source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    Source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type-based access to context intended for error reports. Read more
    Source§

    impl From<VarIntBoundsExceeded> for ConfigError

    Source§

    fn from(_: VarIntBoundsExceeded) -> ConfigError

    Converts to this type from the input type.
    Source§

    impl PartialEq for VarIntBoundsExceeded

    Source§

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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 Copy for VarIntBoundsExceeded

    Source§

    impl Eq for VarIntBoundsExceeded

    Source§

    impl StructuralPartialEq for VarIntBoundsExceeded

    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 diff --git a/pr/547/docs/noq/struct.Written.html b/pr/547/docs/noq/struct.Written.html index 378fab745..7109bfe1f 100644 --- a/pr/547/docs/noq/struct.Written.html +++ b/pr/547/docs/noq/struct.Written.html @@ -1,12 +1,12 @@ -Written in noq - Rust

    Written

    Struct Written 

    pub struct Written {
    +Written in noq - Rust

    Written

    Struct Written 

    Source
    pub struct Written {
         pub bytes: usize,
         pub chunks: usize,
     }
    Expand description

    Indicates how many bytes and chunks had been transferred in a write operation

    Fields§

    §bytes: usize

    The amount of bytes which had been written

    §chunks: usize

    The amount of full chunks which had been written

    If a chunk was only partially written, it will not be counted by this field.

    -

    Trait Implementations§

    §

    impl Clone for Written

    §

    fn clone(&self) -> Written

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    §

    impl Debug for Written

    §

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

    Formats the value using the given formatter. Read more
    §

    impl Default for Written

    §

    fn default() -> Written

    Returns the “default value” for a type. Read more
    §

    impl PartialEq for Written

    §

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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.
    §

    impl Copy for Written

    §

    impl Eq for Written

    §

    impl StructuralPartialEq for Written

    Auto Trait Implementations§

    Blanket Implementations§

    Source§

    impl<T> Any for T
    where +

    Trait Implementations§

    Source§

    impl Clone for Written

    Source§

    fn clone(&self) -> Written

    Returns a duplicate of the value. Read more
    1.0.0 · Source§

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

    Performs copy-assignment from source. Read more
    Source§

    impl Debug for Written

    Source§

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

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

    impl Default for Written

    Source§

    fn default() -> Written

    Returns the “default value” for a type. Read more
    Source§

    impl PartialEq for Written

    Source§

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

    Tests for self and other values to be equal, and is used by ==.
    1.0.0 · 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 Copy for Written

    Source§

    impl Eq for Written

    Source§

    impl StructuralPartialEq for Written

    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 diff --git a/pr/547/docs/noq/trait.ConnectionIdGenerator.html b/pr/547/docs/noq/trait.ConnectionIdGenerator.html index 6dfcaec63..04eb50827 100644 --- a/pr/547/docs/noq/trait.ConnectionIdGenerator.html +++ b/pr/547/docs/noq/trait.ConnectionIdGenerator.html @@ -1,4 +1,4 @@ -ConnectionIdGenerator in noq - Rust

    ConnectionIdGenerator

    Trait ConnectionIdGenerator 

    pub trait ConnectionIdGenerator: Send + Sync {
    +ConnectionIdGenerator in noq - Rust

    ConnectionIdGenerator

    Trait ConnectionIdGenerator 

    Source
    pub trait ConnectionIdGenerator: Send + Sync {
         // Required methods
         fn generate_cid(&mut self) -> ConnectionId;
         fn cid_len(&self) -> usize;
    @@ -7,15 +7,15 @@
         // Provided method
         fn validate(&self, _cid: ConnectionId) -> Result<(), InvalidCid> { ... }
     }
    Expand description

    Generates connection IDs for incoming connections

    -

    Required Methods§

    fn generate_cid(&mut self) -> ConnectionId

    Generates a new CID

    +

    Required Methods§

    Source

    fn generate_cid(&mut self) -> ConnectionId

    Generates a new CID

    Connection IDs MUST NOT contain any information that can be used by an external observer (that is, one that does not cooperate with the issuer) to correlate them with other connection IDs for the same connection. They MUST have high entropy, e.g. due to encrypted data or cryptographic-grade random data.

    -

    fn cid_len(&self) -> usize

    Returns the length of a CID for connections created by this generator

    -

    fn cid_lifetime(&self) -> Option<Duration>

    Returns the lifetime of generated Connection IDs

    +
    Source

    fn cid_len(&self) -> usize

    Returns the length of a CID for connections created by this generator

    +
    Source

    fn cid_lifetime(&self) -> Option<Duration>

    Returns the lifetime of generated Connection IDs

    Connection IDs will be retired after the returned Duration, if any. Assumed to be constant.

    -

    Provided Methods§

    fn validate(&self, _cid: ConnectionId) -> Result<(), InvalidCid>

    Quickly determine whether cid could have been generated by this generator

    +

    Provided Methods§

    Source

    fn validate(&self, _cid: ConnectionId) -> Result<(), InvalidCid>

    Quickly determine whether cid could have been generated by this generator

    False positives are permitted, but increase the cost of handling invalid packets.

    -

    Implementors§

    §

    impl ConnectionIdGenerator for HashedConnectionIdGenerator

    §

    impl ConnectionIdGenerator for RandomConnectionIdGenerator

    \ No newline at end of file +

    Implementors§

    \ No newline at end of file diff --git a/pr/547/docs/noq/trait.NetworkChangeHint.html b/pr/547/docs/noq/trait.NetworkChangeHint.html index 2bb5057cb..035ebf574 100644 --- a/pr/547/docs/noq/trait.NetworkChangeHint.html +++ b/pr/547/docs/noq/trait.NetworkChangeHint.html @@ -1,12 +1,12 @@ -NetworkChangeHint in noq - Rust

    NetworkChangeHint

    Trait NetworkChangeHint 

    pub trait NetworkChangeHint: Debug + 'static {
    +NetworkChangeHint in noq - Rust

    NetworkChangeHint

    Trait NetworkChangeHint 

    Source
    pub trait NetworkChangeHint: Debug + 'static {
         // Required method
         fn is_path_recoverable(
             &self,
             path_id: PathId,
    -        network_path: FourTuple,
    +        network_path: FourTuple,
         ) -> bool;
     }
    Expand description

    Hints when the caller identifies a network change.

    -

    Required Methods§

    fn is_path_recoverable(&self, path_id: PathId, network_path: FourTuple) -> bool

    Inform the connection if a path may recover after a network change.

    +

    Required Methods§

    Source

    fn is_path_recoverable(&self, path_id: PathId, network_path: FourTuple) -> bool

    Inform the connection if a path may recover after a network change.

    After network changes, paths may not be recoverable. In this case, waiting for the path to become idle may take longer than what is desirable. If Self::is_path_recoverable returns false, a multipath-enabled, client-side connection will establish a new path to diff --git a/pr/547/docs/noq/trait.QlogFactory.html b/pr/547/docs/noq/trait.QlogFactory.html index 052bab12a..ac57dec70 100644 --- a/pr/547/docs/noq/trait.QlogFactory.html +++ b/pr/547/docs/noq/trait.QlogFactory.html @@ -1,4 +1,4 @@ -QlogFactory in noq - Rust

    QlogFactory

    Trait QlogFactory 

    pub trait QlogFactory:
    +QlogFactory in noq - Rust

    QlogFactory

    Trait QlogFactory 

    Source
    pub trait QlogFactory:
         Send
         + Sync
         + 'static {
    @@ -12,7 +12,7 @@
         ) -> Option<QlogConfig>;
     }
    Expand description

    Constructs a QlogConfig for individual connections.

    This is set via TransportConfig::qlog_factory.

    -

    Required Methods§

    Required Methods§

    Source

    fn for_connection( &self, side: Side, remote: SocketAddr, @@ -20,4 +20,4 @@ now: Instant, ) -> Option<QlogConfig>

    Returns a QlogConfig for a connection, if logging should be enabled.

    If None is returned, qlog capture is disabled for the connection.

    -

    Implementors§

    \ No newline at end of file +

    Implementors§

    \ No newline at end of file diff --git a/pr/547/docs/noq/trait.TimeSource.html b/pr/547/docs/noq/trait.TimeSource.html index e8d89af23..2869c06bb 100644 --- a/pr/547/docs/noq/trait.TimeSource.html +++ b/pr/547/docs/noq/trait.TimeSource.html @@ -1,7 +1,7 @@ -TimeSource in noq - Rust

    TimeSource

    Trait TimeSource 

    pub trait TimeSource: Send + Sync {
    +TimeSource in noq - Rust

    TimeSource

    Trait TimeSource 

    Source
    pub trait TimeSource: Send + Sync {
         // Required method
         fn now(&self) -> SystemTime;
     }
    Expand description

    Object to get current SystemTime

    This exists to allow system time to be mocked in tests, or wherever else desired.

    -

    Required Methods§

    fn now(&self) -> SystemTime

    Get SystemTime::now() or the mocked equivalent

    -

    Implementors§

    \ No newline at end of file +

    Required Methods§

    Source

    fn now(&self) -> SystemTime

    Get SystemTime::now() or the mocked equivalent

    +

    Implementors§

    \ No newline at end of file diff --git a/pr/547/docs/noq/trait.TokenLog.html b/pr/547/docs/noq/trait.TokenLog.html index 8073434f1..60db43f8c 100644 --- a/pr/547/docs/noq/trait.TokenLog.html +++ b/pr/547/docs/noq/trait.TokenLog.html @@ -1,4 +1,4 @@ -TokenLog in noq - Rust

    TokenLog

    Trait TokenLog 

    pub trait TokenLog: Send + Sync {
    +TokenLog in noq - Rust

    TokenLog

    Trait TokenLog 

    Source
    pub trait TokenLog: Send + Sync {
         // Required method
         fn check_and_insert(
             &self,
    @@ -18,7 +18,7 @@ Servers are encouraged to allow tokens to be used only once, if possible; tokens
     additional information about clients to further narrow applicability or reuse.

    TokenLog pertains only to tokens provided in NEW_TOKEN frames.

    -

    Required Methods§

    Required Methods§

    Source

    fn check_and_insert( &self, nonce: u128, issued: SystemTime, @@ -42,4 +42,4 @@ attacks. The QUIC specification requires that this be limited, if not preven vulnerability; it is permissible for a TokenLog to always return Err. A false positive causes the token to be ignored, which may cause the transmission of some 0.5-RTT data to be delayed until the handshake completes, if a sufficient amount of 0.5-RTT data it sent.

    -

    Implementors§

    \ No newline at end of file +

    Implementors§

    \ No newline at end of file diff --git a/pr/547/docs/noq/trait.TokenStore.html b/pr/547/docs/noq/trait.TokenStore.html index f3b2e02f1..aff114b1b 100644 --- a/pr/547/docs/noq/trait.TokenStore.html +++ b/pr/547/docs/noq/trait.TokenStore.html @@ -1,13 +1,13 @@ -TokenStore in noq - Rust

    TokenStore

    Trait TokenStore 

    pub trait TokenStore: Send + Sync {
    +TokenStore in noq - Rust

    TokenStore

    Trait TokenStore 

    Source
    pub trait TokenStore: Send + Sync {
         // Required methods
         fn insert(&self, server_name: &str, token: Bytes);
         fn take(&self, server_name: &str) -> Option<Bytes>;
     }
    Expand description

    Responsible for storing validation tokens received from servers and retrieving them for use in subsequent connections

    -

    Required Methods§

    fn insert(&self, server_name: &str, token: Bytes)

    Potentially store a token for later one-time use

    +

    Required Methods§

    Source

    fn insert(&self, server_name: &str, token: Bytes)

    Potentially store a token for later one-time use

    Called when a NEW_TOKEN frame is received from the server.

    -

    fn take(&self, server_name: &str) -> Option<Bytes>

    Try to find and take a token that was stored with the given server name

    +
    Source

    fn take(&self, server_name: &str) -> Option<Bytes>

    Try to find and take a token that was stored with the given server name

    The same token must never be returned from take twice, as doing so can be used to de-anonymize a client’s traffic.

    Called when trying to connect to a server. It is always ok for this to return None.

    -

    Implementors§

    \ No newline at end of file +

    Implementors§

    \ No newline at end of file diff --git a/pr/547/docs/search.index/desc/4b7cf45f488d.js b/pr/547/docs/search.index/desc/4b7cf45f488d.js deleted file mode 100644 index 635265456..000000000 --- a/pr/547/docs/search.index/desc/4b7cf45f488d.js +++ /dev/null @@ -1 +0,0 @@ -rd_("AmData flows in both directions0CdThe CE codepoint, signalling that congestion was \xe2\x80\xa600AjContains the success valueBeThe PathId of this path.BmReturns the PathId of this path.AoGet the identity of this stream00AfWhich path is now openAhWith path was abandoned.B`Which path had its state droppedAmPath which has changed statusCfPath over which the observed address was reported, \xe2\x80\xa6AlWhich stream is now readableAlWhich stream is now writableAnWhich stream has been finishedAmWhich stream has been stoppedAnType of the Long header packetBcExperimental! Use at your own risk.0ClWhether a stream communicates data in both directions or \xe2\x80\xa60AhContains the error valueAoThe largest representable valueAlThe maximum path ID allowed.10ClConnects to a QUIC perf server and maintains a specified \xe2\x80\xa6BmData flows only from the stream\xe2\x80\x99s initiator0AnWhich directions data flows in0CaDirectionality for which streams have been openedCdDirectionality for which streams are newly availableCjExplicit congestion notification bits to set on the packet0CeThe Explicit Congestion Notification bits for the \xe2\x80\xa61CkReturns the most recently observed external address, or \xe2\x80\xa6B`The current best RTT estimation.BfThe number of I/O operations executed.0BcLength of QUIC packet being decodedAlLength of the packet payload0BmThe number of bytes the associated buffer hasBbSet a custom TokenLog0CaMinimum RTT registered so far for this estimator.ClConstruct with an approximate maximum memory usage and a \xe2\x80\xa6CjConstruct an endpoint with arbitrary configuration and \xe2\x80\xa6DiCreates a new QlogConfig that writes a qlog trace to the \xe2\x80\xa6CiCreates a new qlog factory that writes files into the \xe2\x80\xa6D`Create a default config with a particular reset_keyCmCreate a default config with a particular handshake token \xe2\x80\xa6CkCreate a default config with a particular cryptographic \xe2\x80\xa6AmConstruct cid from byte arrayoConstruct emptyAeCreate a new StreamIdDjConstruct a state using the given config and current time \xe2\x80\xa600:8AeCreate a new endpointDcCreate a new instance of FixedLengthConnectionIdParserBdCreate a generator with a random key:987DgBegin decoding a QUIC packet from bytes, returning any \xe2\x80\xa67BkConstruct an error with a code and a reasonCgInitialize Random CID generator with a fixed CID length87BeCreates a new FourTuple.777BfQUIC transport protocol implementationCkGet SystemTime::now() or the mocked equivalentAhLook up the current time01ChCurrent best estimate of this connection\xe2\x80\x99s latency \xe2\x80\xa6000ChThe ECT(0) codepoint, indicating that an endpoint is \xe2\x80\xa600ChThe ECT(1) codepoint, indicating that an endpoint is \xe2\x80\xa600CaA complete set of keys for a certain packet space0CbA Long packet header, as used during the handshakeChNot attributed to any particular FrameType.CkAn open network transmission within a multipath-enabled \xe2\x80\xa6Ab(Multi)Path eventsB`An error occurred during readingCeWhether an endpoint was the initiator of a connection0nThe 0 path id.0CaThe address observed by the remote over this pathCjThe source address of the datagram(s) contained in the \xe2\x80\xa6mType of errorBlCurrent congestion window of the connection.0gPayloadAoReturns the argument unchanged.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BaCalls U::from(self).00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dNextCoMethod for opening a sealed message data in-place.B`Open a single stream if possible1CgReturns the Path structure of an open pathBhPing the remote endpoint over this path.AhPing the remote endpointCkCheck whether the timer has expired, and register to be \xe2\x80\xa6BaReturns application-facing eventsBgRead data contiguously from the stream.AoRead from the given recv streamCcDecode TransportParameters from bufferBiReceive an unreliable, unordered datagramBdMethod for sealing a token in-place.0CiQueue an unreliable, unordered datagram for immediate \xe2\x80\xa6CbSends a Transmit on the given socket.CmNumber of address validation tokens sent to a client when \xe2\x80\xa60BmThe side of the connection (client or server)ChLook up whether we\xe2\x80\x99re the client or server of this \xe2\x80\xa6AlMethod for signing a message0CdAmount of data written to the caller-supplied buffer0hSpin bitAcStop accepting data0BoStop accepting data on the given receive streamCiTry to find and take a token that was stored with the \xe2\x80\xa60BgA chunk of data from the receive stream0CiThe RFC8312 congestion controller, as widely used for TCP0Borustls reports protocol errors using this type.0DbErrors encountered while decoding TransportParametersCdErrors that the nat traversal state might encounter.BeEvents of interest to the applicationCiEvent emitted when the client receives ADD_ADDRESS or \xe2\x80\xa6CjAttributed to a specific FrameType, never \xe2\x80\xa6A`Any other error.0CcThe peer abandoned transmitting data on this streamCnThe peer is unable to continue processing this connection, \xe2\x80\xa6CdThe peer abandoned transmitting data on this stream.1AeA Retry packet headerCdA short packet header, as used during the data phaseCmBest-effort extraction of the ALPN protocols from the TLS \xe2\x80\xa6BiConstruct a fresh Controller0AiThe contents of the chunkCiThe total amount of bytes which have been transferred \xe2\x80\xa6BjThe amount of bytes which had been written210BnUnderlying error describing reason for failureBaClose the connection immediately.CnClose all of this endpoint\xe2\x80\x99s connections immediately and \xe2\x80\xa6AaCloses this path.AnClose a connection immediatelyBcFrame type that triggered the errorCcDistinguishes streams of the same initiator and \xe2\x80\xa60CjReturns whether the codepoint is a CE, signalling that \xe2\x80\xa60AgKey for encrypting data0BgParse a connection id from given bufferAhReturns all known paths.BlUpdate the timer to expire at iBbClose the send stream immediately.BeAbandon transmitting data on a streamCnRespond with a retry packet, requiring the client to retry \xe2\x80\xa60CiDrive future to completion in the backgroundCeShow connection stats the at the end of the benchmarkAmReturns connection statisticsBiReturns relevant stats from this EndpointCaReturns the PathStats for this path.2BcTitle to record in the qlog capture0CmWrite a buffer into this stream, returning how many bytes \xe2\x80\xa6AmSend data on the given streamCcEncode TransportParameters into bufferC`Future produced by Endpoint::acceptClPaths marked as backup will only be used if there are no \xe2\x80\xa6CeChunks returned from RecvStream::read().AmThe initiator of a connectionAdRun as a perf client1CgAttempted to initiate NAT traversal on a closed, or \xe2\x80\xa6CmThe receiver lagged too far behind. Attempting to receive \xe2\x80\xa6CcFuture produced by Connection::open_biAjA new path has been openedChOne or more new streams has been opened and might be \xe2\x80\xa6ChId representing different paths when using multipath \xe2\x80\xa60AbCoding result typeAlThe acceptor of a connectionAdRun as a perf server1mStream eventsAiAn integer less than 2^620CfGet the next incoming connection attempt from a clientClAttempt to accept this incoming connection (an error may \xe2\x80\xa6CcAccept a remotely initiated stream of a certain \xe2\x80\xa61C`The amount of full chunks which had been written0BlAllows to configure the desired cipher suiteCiHelper to construct an endpoint for use with outgoing \xe2\x80\xa6CcWait for the connection to be closed for any reasonAfCoding related traits.BnAccess the configuration used by this endpointChTraits and implementations for the QUIC cryptography \xe2\x80\xa6BjCreate QUIC error code from TLS alert codeBoTLS configuration used for incoming connections210BkAn underlying crypto (e.g. TLS) layer errorCgDecode a plain header from given buffer, with given \xe2\x80\xa6DiDecode a Self from the provided buffer, if the buffer is \xe2\x80\xa6ChThe destination IP address which was encoded in this \xe2\x80\xa6D`Append the encoding of self to the provided buffer.CmNotify the peer that no more data will ever be written to \xe2\x80\xa6CnFinish a send stream, signalling that no more data will be \xe2\x80\xa6B`Process an incoming UDP datagramAfHeader protection keys0ClIgnore this incoming connection attempt, not sending any \xe2\x80\xa60C`Potentially store a token for later one-time use0CfPerform NSS-compatible TLS key logging to the file \xe2\x80\xa6AhThe offset in the stream0B`Packet deliveries were confirmed0AfPacket protection keys0lRandom valueBcHuman-readable reason for the close000BhHuman-readable explanation of the reasonBeReason that the connection was closedBcReason why this path was abandoned.AjSwitch to a new UDP socketBgReject this incoming connection attempt0AgKey for decrypting dataBoReturns the remote address of the network path.1AmTLS interface based on rustls0CnHelper to construct an endpoint for use with both incoming \xe2\x80\xa6BkOptional source IP address for the datagram00CgThe current local PathStatus of this path.B`The new status set by the remoteCfThe size of a single datagram in the associated bufferCkStatistics about datagrams and bytes received on this path.ChStatistics about UDP datagrams received on a connection.10CgStatistics about datagrams and bytes sent on this path.CkStatistics about UDP datagrams transmitted on a connection.10AnMethod for verifying a message0CcNumber of ack-eliciting bytes that may be in flight0A`Send would blockCcNo more data is currently available on this stream.CjThe peer is not able to accept additional data, or the \xe2\x80\xa6BfA catch-all error for unlikely errors.0BlA key for signing with HMAC-based algorithms0AhAn Initial packet headerBnA pair of keys for bidirectional communication0BhA simple, standard congestion controller0CdFuture produced by Connection::open_uniCkAbstracts I/O and timer operations for runtime independenceBfA cryptographic session (commonly TLS)0CcThe peer is no longer accepting data on this streamCfFuture returned from SendStream::stopped.ClThe peer is no longer accepting data on this stream, and \xe2\x80\xa6CkThe peer is no longer accepting data on this stream. No \xe2\x80\xa6CgThe peer asked us to stop sending on an outgoing streamAaAccess to streamsCaThe stream is larger than the user-supplied limitCnAttributed to some frame type this implementation does not \xe2\x80\xa6ClIndicates how many bytes and chunks had been transferred \xe2\x80\xa60l0-RTT packetCjReturns the length of a CID for connections created by \xe2\x80\xa60CdProvide the length of dst_cid in short header packetCcThe total number of clients which should be createdAlConnect to a remote endpointAeInitiate a connectionBbDecrypt the Initial packet payloadCgDecrypt the packet payload with the given packet numberBcDecrypt the given packet\xe2\x80\x99s header210ClConstructs a value with arbitrary fields, intended to be \xe2\x80\xa6DjConstruct an event that indicating that a Connection will \xe2\x80\xa6BkThe destination connection ID of the packetBkThe destination Connection ID of the packetAiDestination Connection ID00000CgEncrypt the packet payload with the given packet numberBcEncrypt the given packet\xe2\x80\x99s header10CbCheck if this stream has been opened during 0-RTT.0CmRetrieve implementation-specific metrics used to populate \xe2\x80\xa60CnThe maximum UDP payload size guaranteed to be supported by \xe2\x80\xa60CjUniform interface to send and receive UDP packets with \xe2\x80\xa6BbOne or more packets were just sent0BmInitiate a new outgoing bidirectional stream.CaReturns the path ID of the new path being opened.AdSource Connection ID0000CiCompletes when the peer stops the stream or reads the \xe2\x80\xa6CjCheck if this stream was stopped, get the reason if it wasCcThe total number of streams which should be createdAlProvide control over streamsCeThe length of the AEAD tag appended to packets on \xe2\x80\xa60CdUpgrade the handle to a full ConnectionB`Upgrades to a Path.AkSet the QUIC version to use0lQUIC versionB`The version that was unsupported11CeFuture produced by Connection::accept_biAfAn unreliable datagramBdDatagram support is disabled locally0A`A QUIC endpoint.BcThe main entry point to the libraryChA finished stream has been fully acknowledged or stoppedCkAn incoming connection for which the server has not yet \xe2\x80\xa60BoLong packet types with uniform header structureB`The largest encoded value length0Cmthe connection is being closed abruptly in the absence of \xe2\x80\xa60CeFuture returned by Connection::on_closedClFuture produced by crate::Connection::open_pathCmA currently open stream likely has data or errors waiting \xe2\x80\xa6CkMetadata for a single buffer filled with bytes received \xe2\x80\xa6BkResponse generated directly by the endpointCfIdentifier for a stream within a particular connection0CnCommunication with the peer has lapsed for longer than the \xe2\x80\xa6CkWe didn\xe2\x80\x99t receive any data from the remote within the \xe2\x80\xa61ChResponsible for limiting clients\xe2\x80\x99 ability to reuse \xe2\x80\xa60ClThe datagram is larger than the connection can currently \xe2\x80\xa60AbAn outgoing packet00CmStatistics about UDP datagrams transmitted or received on \xe2\x80\xa60CnA formerly write-blocked stream might be ready for a write \xe2\x80\xa6AkCongestion algorithm to useAhContents of the datagramBoMark the read data as consumed from the stream.BnStatistics about frames received on this path.CaStatistics about frames received on a connection.10CaStatistics about frames transmitted on this path.CdStatistics about frames transmitted on a connection.10DhConstructs cid by reading len bytes from a Buf0DkCreates a new qlog factory that writes files into QLOGDIR, \xe2\x80\xa60BfCreate a generator with a specific keyBjConstruct a VarInt infallibly0BeSucceeds iff x < 2^620AeWhat type we receivedAoWhat handshake type we received10CbWhether 0-RTT is/was possible during the handshakeCmSpecifies the time to wait after completing MTU discovery \xe2\x80\xa60CcReturns Self for use in down-casting to extract \xe2\x80\xa60EhReturns true if the Connection associated with this handle \xe2\x80\xa6CmDuration after an address validation token was issued for \xe2\x80\xa60CeThe local IP address which was used when the peer \xe2\x80\xa6000BnReturns the local address of the network path.ClCompute the maximum size of datagrams that may be passed \xe2\x80\xa6BnInitiate a new outgoing unidirectional stream.BcGet the priority of the send streamAlGet the priority of a streamCfThe negotiated application protocol, if ALPN is in use0Aeqlog output directoryBbOptional response to transmit backCiOptional seed to be used internally for random number \xe2\x80\xa60AlSlow start threshold (bytes)0BeSucceeds iff x < 2^6200000DaSends a Transmit on the given socket without any \xe2\x80\xa6DkQuickly determine whether cid could have been generated by \xe2\x80\xa600BmA path was abandoned and is no longer usable.CfFuture produced by Connection::accept_uniCdPaths marked with as available will be used when \xe2\x80\xa6CnAt least one new stream of a certain directionality may be \xe2\x80\xa6ClConfiguration for the Bbr congestion controller0BkThe connection was successfully establishedAoAPI to control datagram trafficAlDecoding of QUIC primitives.CkA path was discarded and all remaining state for it has \xe2\x80\xa6BgInfallible encoding of QUIC primitives.CnIdentifies a network path by the combination of remote and \xe2\x80\xa6A`Handshake packetBcKeys used to protect packet headers0CiCatch-all error for problems while decoding transport \xe2\x80\xa6CeNat traversal attempt failed due to a multipath errorBdKeys used to protect packet payloads0BmErrors that might trigger a path being closedAnApplication events about pathsBjStatistics related to a transmission path.0AeA read error occurredBmErrors that arise from reading from a stream.C`Errors triggered when reading from a recv streamCiAn object for asynchronously writing to an associated \xe2\x80\xa6BmAccept the next incoming bidirectional streamBbDuplicate the controller\xe2\x80\x99s state0BeThe number of UDP datagrams observed.AaControl datagrams1BeCreate new object from the given bits00BoWhich side of a connection initiated the stream0CmConvert into a 0-RTT or 0.5-RTT connection at the cost of \xe2\x80\xa6BoShorthand for self == Side::Client0B`Whether the connection is closedBoShorthand for self == Side::Server0CbWhether it is legal to respond with a retry packet0CdWhether to allow clients to migrate to new addresses0CdConstruct a timer that will expire at iBoLow-level protocol logic for the QUIC protoocolCjWait for the connection to be closed without keeping a \xe2\x80\xa6CjOpens an additional path if the multipath extension is \xe2\x80\xa6A`Opens a new pathBmPing the remote endpoint over a specific pathCiAttempts to read from the stream into the provided bufferCeReceive UDP datagrams, or register to be woken if \xe2\x80\xa6CkSend a UDP datagram, or register to be woken if sending \xe2\x80\xa6ClPrivate key used to send authenticated connection resets \xe2\x80\xa60BmGenerate the integrity tag for a retry packet0BgA stable identifier for this connectionCePrivate key used to authenticate data included in \xe2\x80\xa60BlThe position of a token in the packet bufferCgTransport configuration to use for incoming connections0CjWait for all connections on the endpoint to be cleanly \xe2\x80\xa6BoWrite a buffer into this stream in its entiretyCiAbstract implementation of an async timer for runtime \xe2\x80\xa6BoNumber of UDP packets to send/receive at a timeCkError indicating that a path has not been opened or has \xe2\x80\xa6BnThe path is already closed or was never opened1BeIn-progress connection attempt futureAbA QUIC connection.CeProtocol state and logic for a single QUIC connectionCeCommon interface for different congestion controllers0CjNumber of frames transmitted or received of each frame \xe2\x80\xa60BoThe connection ID was not recognized by the \xe2\x80\xa60DdThe type used to refer to FrameTypes in closing and \xe2\x80\xa6DbA stream of PathEvents for all paths in a connection.AnThe QUIC-MULTIPATH path statusBeConfiguration for qlog trace logging.0BnA stream that can only be used to receive dataAaAccess to streamsChErrors that arise while waiting for a stream to be resetDhError for attempting to retry an Incoming which already \xe2\x80\xa60BkA stream that can only be used to send data3BmObject to get current SystemTime0AdA rustls TLS session0CkResponsible for storing validation tokens received from \xe2\x80\xa60AeA borrowed UDP socketBjErrors that arise from writing to a streamBoErrors triggered while writing to a send streamBoAccept the next incoming uni-directional streamCkWhether the implementation is permitted to set the spin \xe2\x80\xa60CiCloses a path and sends a PATH_ABANDON frame with the \xe2\x80\xa6CdLogic for controlling the rate at which data is sent0BfWhether to print connection statisticsBnClass of error as encoded in the specificationB`Application-specific reason code10CaThe error code to be sent with the abandon frame.BoThe error that was sent with the abandon frame.AoError code supplied by the peerBcType of frame that caused the close0AiExtract the integer value0CnWhether there is no longer any need to keep the connection \xe2\x80\xa6DkDetermine whether this is the last event a Connection will \xe2\x80\xa6CiLook up the local IP address and port used by this socketDgGet the local SocketAddr the underlying socket is bound toBfThe amount of bytes lost on this path.0CjPad UDP datagrams carrying application data to current \xe2\x80\xa60AgReturns path statistics0CjThe final path stats, they are no longer available via \xe2\x80\xa6C`Attempt to write bytes from buf into the stream.AmRead the next segment of dataAoReads the next segment of data.CkRead an exact number of bytes contiguously from the stream.BnSets the PathStatus of this path.BoEpoch qlog event times are recorded relative to0ClError type for attempting to accept an IncomingBjErrors in the configuration of an endpoint0AeGeneric crypto errors0CnConfiguration for the Cubic congestion controller0CdReasons why attempting to finish a stream might failCnMaximum duration of inactivity to accept before timing out \xe2\x80\xa60AnValue exceeds supported bounds0D`Constructs a QlogConfig for individual connections.0AfA noq runtime for smolB`Application events about streamsCbAccept this incoming connection using a custom \xe2\x80\xa6CeLargest UDP payload size the path currently supports.ClStorage size required for the largest packet that can be \xe2\x80\xa61BiDescription to record in the qlog capture0BjThe socket this datagram should be sent to00DcCreates a new FourTuple without a known local address.BkStarting guess for maximum UDP payload sizeCkThe initial value to be used as the maximum UDP payload \xe2\x80\xa60ChUDP payload size that the network must be capable of \xe2\x80\xa6BjThe RTT used before an RTT sample is taken0BfThe initial round-trip-time (in msecs)CeThe amount of concurrent streams which should be usedDdPackets are acked in batches, all with the same now \xe2\x80\xa60AdPacing rate (bits/s)0DeA stream of PathEvents for all paths in this connection.DfGets the local PathStatus for a known PathIdAnRead the next segments of dataCkConvenience method to read all remaining data into a bufferAlProvide control over streamsBoThe sample size used for this key\xe2\x80\x99s algorithm01CiMaximum number of bytes to transmit to a peer without \xe2\x80\xa600BoThe server name specified by the client, if any0BmObject to get current SystemTime0BdSet a custom TokenStore0CaNumber of bytes to transmit from client to serverCnSpecifies the upper bound to the max UDP payload size that \xe2\x80\xa60ChReturns a weak reference to the inner connection struct.CdReturns a WeakPathHandle for this path.DgCreate a server config with the given crypto::ServerConfig0CeSets a prefix to the filename of the generated files.0DbWrite a single Bytes into this stream in its entiretyBbAn ADD_ADDRESS frame was received.BfConfiguration for outgoing connectionsCaClient-side configuration for the crypto protocol10CgThe stream has already been stopped, finished, or resetBmThe stream has already been finished or resetCmError indicating that a stream has not been opened or has \xe2\x80\xa6CjThe stream has not been opened or was already stopped, \xe2\x80\xa6CfThe stream has not been opened or has already been \xe2\x80\xa6CmThe stream has not been opened or was already finished or \xe2\x80\xa63CgErrors in the parameters being used to create a new \xe2\x80\xa60BkProtocol-level identifier for a connection.0CkWe couldn\xe2\x80\x99t decrypt a message. This is invariably fatal.0BjExplicit congestion notification codepoint00CnWe couldn\xe2\x80\x99t encrypt a message because it was larger than \xe2\x80\xa60BhParameters that are semantically invalidCkCannot close the last remaining open path via the local \xe2\x80\xa6Akn0\xe2\x80\x99s nat traversal eventsDhNull implementation of TokenLog, which never accepts tokens0ClReceived an observation of our external address from the \xe2\x80\xa6CiFuture produced by Connection::read_datagramBiThe remote changed the status of the pathBlRTT estimation for a particular network pathCnFuture produced by Connection::send_datagram_waitBiParameters governing incoming connectionsCaServer-side configuration for the crypto protocol10CmErrors that arise while monitoring for a send stream stop \xe2\x80\xa6AgA noq runtime for TokioC`Returns the lifetime of generated Connection IDs0BlIf the connection is closed, the reason why.CjConnect to a remote endpoint using a custom configuration.AlConservative estimate of RTTBnGet the 0-RTT keys if available (clients only)0AgWhich types we expectedB`Which handshake type we expected10AcGenerates a new CID0ClThe number of segments to read when GRO is enabled. Used \xe2\x80\xa6DeProcess ConnectionEvents generated by the associated \xe2\x80\xa6EaProcess EndpointEvents emitted from related ConnectionsCgCreate the initial set of keys given the client\xe2\x80\x99s \xe2\x80\xa6000BhThe amount of packets lost on this path.0DcMaximum number of Incoming to allow to exist at a time0CjWhether datagrams might get fragmented into multiple parts0CmWhether transmitted datagrams might get fragmented by the \xe2\x80\xa6CkReturns the path\xe2\x80\x99s network path represented as a 4-tuple.CkThe original destination CID when initiating the connectionCiThe original destination connection ID sent by the clientDhReturns the next time at which handle_timeout should be \xe2\x80\xa6D`Configures qlog capturing by setting a QlogFactory.0AgThe runtime type to useCkThe segment size if this transmission contains multiple \xe2\x80\xa600ChThe number of streams that may have unacknowledged data.CbSet the lifetime of CIDs created by this generator0BcSet the priority of the send streamAlSet the priority of a streamCnInitialize a QUIC-compatible TLS client configuration with \xe2\x80\xa6000DgWrite a slice of Bytes into this stream, returning how \xe2\x80\xa6AmSend data on the given streamCkWe received a fatal alert. This means the peer is unhappy.0BhBloom filter-based TokenLog0CmThe connection could not be created because not enough of \xe2\x80\xa6000CaEvent resulting from processing a single datagramBlEvents sent from a Connection to an EndpointAoStatistics on Endpoint activityBnThe stream finished before all bytes were readBlAuthentication data for (rustls) TLS session0Ccreceived an invalid Retry Token in a client Initial0ChIterator over ALPN protocol names from a TLS ClientHelloAlThe packet header is invalidBkThe local application closed the connection0DaThe datagram may result in starting a new ConnectionD`Configuration for the NewReno congestion controller0BjDecodes a QUIC packet\xe2\x80\x99s invariant headerCgErrors triggered when opening a recv stream for readingCaDefault implementation of TimeSource0CgError indicating that the provided buffer was too smallChFor clients, if the peer accepted the 0-RTT data packetsAbAck Frequency modeAfExports for benchmarksBoSupply a custom connection ID generator factory0DgCreate a UdpSender that can register a single task for \xe2\x80\xa6CaNumber of bytes to transmit from server to clientAmGet the Incoming0CnThe max_ack_delay we will request the peer to use0CgDisable packet encryption/decryption (for debugging \xe2\x80\xa6CkThe known MTU for the current network path has been updated0BbCryptographic identity of the peerBgGet the peer\xe2\x80\x99s identity, if availableDhFor the rustls TlsSession, the Any type is \xe2\x80\xa610CnAttempts to read from the stream into the provided buffer, \xe2\x80\xa6AkReturns packets to transmitDjConfigures qlog capturing through the QLOGDIR environment \xe2\x80\xa60AoReceive an application datagramDfTransmit data as an unreliable, unordered application \xe2\x80\xa6CmWhether to implement fair queuing for send streams having \xe2\x80\xa60BfLength of sign\xe2\x80\x99s output0BnStart a client session with this configurationBnStart a server session with this configuration10BdA REMOVE_ADDRESS frame was received.CgAbstract implementation of a UDP socket for runtime \xe2\x80\xa6BgErrors triggered when abandoning a pathAgThe connection was lost00000ChGlobal configuration for the endpoint, affecting all \xe2\x80\xa60Cithe endpoint encountered an internal error and cannot \xe2\x80\xa60FbBasic adapter to let Incoming be await-ed like a ConnectingBhEncounter a frame ID that was not valid.CeThe peer sent us a TLS message with invalid contents.0Amno viable network path exists0DhNull implementation of TokenStore, which does not store \xe2\x80\xa60CiThe peer deviated from the standard TLS protocol. The \xe2\x80\xa60BmErrors that arise from reading from a stream.C`Errors from RecvStream::read_to_endCaIndicates whether a frame needs to be transmittedCmThe peer violated the QUIC specification as understood by \xe2\x80\xa60CiTransport-level errors occur when a peer violates the \xe2\x80\xa6C`Tokio-compatible UDP socket with some useful \xe2\x80\xa6DiWeak handle for a Path that does not keep the connection \xe2\x80\xa6BnCreate a client endpoint and client connectionAgGet a session referenceDiReturns a QlogConfig for a connection, if logging should \xe2\x80\xa60AiProcess timer expirationsBjParameters negotiated during the handshake0CfGet data negotiated during the handshake, if available0AiInitial congestion windowCiDefault limit on the amount of outstanding data in bytes.001000BnConverts this stream into an unordered stream.DdReturns true until the connection is fully established.CeWhether the connection is in the process of being \xe2\x80\xa61BfVerify the integrity of a retry packet0CnSpecifies the minimum MTU change to stop the MTU discovery \xe2\x80\xa60BdCompute keys for the next key update0BkConfigures qlog capturing into a directory.0AlRead bytes of handshake data0BeWhether to use the unordered read APIClMaximum number of bytes the peer may transmit across all \xe2\x80\xa600CkCompletes when the stream has been reset by the peer or \xe2\x80\xa60CiCheck whether this stream has been reset by the peer, \xe2\x80\xa6AjThe peer\xe2\x80\x99s UDP addressesAhThe peer\xe2\x80\x99s UDP address0BgThe peer\xe2\x80\x99s UDP address for this path.1CeSaturating integer addition. Computes self + rhs, \xe2\x80\xa6000ChSaturating integer subtraction. Computes self - rhs, \xe2\x80\xa60CkMaximum reordering in time space before time based loss \xe2\x80\xa60ChReason given by the transport for closing the connection0BfReasons why a connection might be lost0CiThe datagram is redirected to its ConnectionBlEvents sent from an Endpoint to a ConnectionAfConnection statistics.0BiStatistics for the currently open streamsAcPlain packet headerBkEnables writing qlog traces to a directory.0AkThe remote closed the path.CfError for when a validation token may have been reused0C`Parameters governing the core QUIC state machine0CbThe peer doesn\xe2\x80\x99t implement any supported version0CdFuture that completes when a connection is fully \xe2\x80\xa6CbThis was a 0-RTT stream and the server rejected it000CjAutomatically select an appropriate runtime from those \xe2\x80\xa6CkWhether to accept QUIC packets containing any value for \xe2\x80\xa60CdMaximum number of incoming packets that may fail \xe2\x80\xa60CnThe interface index of the interface on which the datagram \xe2\x80\xa6AjSwitch to a new UDP socketCiCreates a server endpoint which runs on the given runtimeD`Sets the PathStatus for a known PathIdCfSee proto::TransportConfig::send_window()BoSee TransportConfig::send_window()BmReturns whether a frame should be transmittedD`Convert t into the socket type used by this runtimeCdWrites handshake bytes into the given buffer and \xe2\x80\xa60ClStream produced by Path::observed_external_addrCiReason given by an application for closing the connection0CbThe peer\xe2\x80\x99s QUIC stack aborted the connection \xe2\x80\xa60DjInternal identifier for a Connection currently associated \xe2\x80\xa6CdOne or more application datagrams have been receivedBjDecrypted payload of a QUIC Initial packetCaThe endpoint can no longer create new connections0Cnreceived a STREAM frame or a RESET_STREAM frame containing \xe2\x80\xa60ClSpecific failure cases from keys_match or a \xe2\x80\xa60A`key update error0CaCurrent limits do not allow us to open more pathsClThe peer doesn\xe2\x80\x99t support a protocol version/feature we \xe2\x80\xa60BjA QUIC-compatible TLS client configuration0BjA QUIC-compatible TLS server configuration0EfTokenStore implementation that stores up to N tokens per \xe2\x80\xa60CgAn endpoint (local or remote) tried to add too many \xe2\x80\xa6CmWe didn\xe2\x80\x99t receive a path response in time after opening \xe2\x80\xa6CaPath could not be validated and will be abandonedBcA Version Negotiation packet headerCiRecord that the token was used and, ideally, return a \xe2\x80\xa60CjCurrent state of the congestion control algorithm, for \xe2\x80\xa6CcCurrent state of this connection\xe2\x80\x99s congestion \xe2\x80\xa6BaUpdate traffic keys spontaneously0CnThe maximum amount of segments which can be transmitted if \xe2\x80\xa6CnMaximum duration of inactivity to accept before timing out \xe2\x80\xa60Cgn0\xe2\x80\x99s (https://n0.computer) NAT Traversal protocol \xe2\x80\xa6CeGet the number of connections that are currently openBmNumber of connections that are currently openCiOpens a new path if no path exists yet for the remote \xe2\x80\xa6CmOpens a new path only if no path on the same network path \xe2\x80\xa6CiMaximum reordering in packet number space before FACK \xe2\x80\xa60CfGet the size of the socket receive bufferAlReceive buffer size in bytesCcGet the size of the socket send bufferAiSend buffer size in bytesBiSet a custom TransportConfig000ChConfiguration for sending and handling validation tokens0CnCreate a server config with the given certificate chain to \xe2\x80\xa60DdWrite a slice of Bytes into this stream in its entiretyCfthe application or application protocol caused the \xe2\x80\xa60AnThe peer closed the connectionBoThe path was closed locally by the application.1B`Constructs controllers on demand0BdCommon congestion controller metrics0ClThe trait for encrypting tokens that power retry packets \xe2\x80\xa60BcThe given server name was malformed0CbHints when the caller identifies a network change.0AcPacket decode errorBdReason for why a path was abandoned.BmErrors that can arise when sending a datagram0CcThe peer does not support receiving datagram frames0BdCongestion events on the connection.0AiCongestion window (bytes)0ClCompute the maximum size of datagrams that may be passed \xe2\x80\xa6BoBytes available in the outgoing datagram bufferClReplace the server configuration, affecting new incoming \xe2\x80\xa60Cmthe endpoint has reached the confidentiality or integrity \xe2\x80\xa60CkParameters for controlling the peer\xe2\x80\x99s acknowledgement \xe2\x80\xa60DjThe max_fragment_size value supplied in configuration was \xe2\x80\xa60Bmthe server refused to accept a new connection0BjParse connection id in short header packetCjOne or more application datagrams have been sent after \xe2\x80\xa6Ckreceived more data than permitted in advertised data limits0AoThe TLS handshake was confirmedBjThe connection\xe2\x80\x99s handshake data is readyCeAttempted an ordered read following an unordered readAnWe saw an invalid certificate.0BcParameters governing MTU discovery.0BnNot enough addresses to complete the operationCkdetected an error with protocol compliance that was not \xe2\x80\xa60Cjreceived a frame for a stream identifier that exceeded \xe2\x80\xa60Cnreceived a frame for a stream that was not in a state that \xe2\x80\xa60AnError from setting path statusAjTransport-level error code0ChThe local endpoint does not support the QUIC version \xe2\x80\xa6CkError indicating that the specified QUIC version is not \xe2\x80\xa61C`Packet uses a QUIC version that is not supported1CiMaximum quantity of out-of-order crypto layer data to \xe2\x80\xa60C`Create a VarInt without ensuring it\xe2\x80\x99s in range0ChCumulative number of Quic handshakes ignored on this \xe2\x80\xa6EgReturns true if the two WeakConnectionHandle point at the \xe2\x80\xa6CiMinimum interval between outgoing stateless reset packets0CjConstruct with an approximate maximum memory usage and \xe2\x80\xa60ChCumulative number of Quic handshakes refused on this \xe2\x80\xa6AnReturns the remote path statusDfTransmit data as an unreliable, unordered application \xe2\x80\xa6CnUpdates the set of ALPN protocols configured in the client \xe2\x80\xa6CnUpdates the set of ALPN protocols configured in the server \xe2\x80\xa610CiSee proto::TransportConfig::receive_window()CbSee TransportConfig::receive_window()B`Override supported QUIC versions0CiOverride the instant relative to which all events are \xe2\x80\xa60CcA stream of NAT traversal updates for a connection.BkNo remote CIDs available to open a new pathCkTransport parameters used to negotiate connection-level \xe2\x80\xa6CgA stream that can be used to receive data out-of-order.CmThe certificate verifier doesn\xe2\x80\x99t support the given type \xe2\x80\xa60CfThe operation is not allowed for this endpoint\xe2\x80\x99s \xe2\x80\xa6CiCumulative number of Quic handshakes accepted by this \xe2\x80\xa6CjSpecifies the amount of time that MTU discovery should \xe2\x80\xa60CiIf the 0-RTT-encrypted data has been accepted by the peer0BgWait for the handshake to be confirmed.CgInform the connection if a path may recover after a \xe2\x80\xa60CgPeriod of inactivity before sending a keep-alive packet0CfThe number of PLPMTUD probe packets lost on this path.0BlPackets were deemed lost or marked congested0CgCumulative number of Quic handshakes sent from this \xe2\x80\xa6CnThe number of remotely initiated open streams of a certain \xe2\x80\xa6AhBench fns for SendBufferCfThe number of PLPMTUD probe packets sent on this path.0Bireceived a frame that was badly formatted0CkThis function doesn\xe2\x80\x99t work until the TLS handshake is \xe2\x80\xa60CkWe received a TLS message that isn\xe2\x80\x99t valid right now. \xe2\x80\xa60CiThe remote SocketAddr supplied was malformedCkThe remote address for the path is not supported by the \xe2\x80\xa61ChThe initial cipher suite (AES-128-GCM-SHA256) is not \xe2\x80\xa60CnWatches the external address reported by the peer for this \xe2\x80\xa6BdPaths can only be opened client-sideDmError returned when constructing a VarInt from a value >= \xe2\x80\xa60CeA handle to some connection internals, use with care.DkSpecifies the ACK frequency config (see AckFrequencyConfig \xe2\x80\xa60CjThe number of times a black hole was detected in the path.0CgMaximum number of received bytes to buffer for each \xe2\x80\xa60AeIs multipath enabled?ClMaximum number of datagrams that might be described by a \xe2\x80\xa60CkMaximum UDP payload size accepted from peers (excluding \xe2\x80\xa60AmMax UDP payload size in bytesDkSpecifies the MTU discovery config (see MtuDiscoveryConfig \xe2\x80\xa60AmReturn endpoint-facing eventsCkThe preferred IPv4 address that will be communicated to \xe2\x80\xa60CkThe preferred IPv6 address that will be communicated to \xe2\x80\xa60ChThe reordering threshold we will request the peer to use0ClDuration after a retry token was issued for which it\xe2\x80\x99s \xe2\x80\xa60C`Sets the keep_alive_interval for a specific pathDfResize the receive buffer of socket to bytesDcResize the send buffer of socket to bytesBfThe peer\xe2\x80\x99s QUIC transport parametersBdQUIC connection transport parameters1CaGenerates connection IDs for incoming connections0CdAn incoming connection did not support any known \xe2\x80\xa60BjNo default client configuration was set up0BiPath abandoned due to unstable interfaces0ClConfiguration for sending and handling validation tokens \xe2\x80\xa60CmMaximum number of packets that may be sent using a single \xe2\x80\xa60CiNotify connections that the local network address has \xe2\x80\xa6ChHandle a change in the local address, i.e. an active \xe2\x80\xa6CiCounter for the number of bytes currently used in the \xe2\x80\xa6CgReturns whether we think the other address probably \xe2\x80\xa6CkReduction in congestion window when a new loss event is \xe2\x80\xa60DdMaximum number of datagrams that a Transmit may encode.0CfA stream of NAT traversal updates for this connection.CjGet the address observed by the remote over the given pathCiMaximum number of bytes the peer may transmit without \xe2\x80\xa600Chreceived more data in CRYPTO frames than can be buffered0B`The extension was not negotiatedCbWe failed to figure out what time it currently is.0CbWe failed to acquire random bytes from the system.0CnError indicating that this operation requires multipath to \xe2\x80\xa6BnThe extension was not negotiated with the peerAkMultipath is not negotiatedCnError when the multipath extension was not negotiated, but \xe2\x80\xa6CjThe path was opened in a NAT traversal round which was \xe2\x80\xa6BnHeader of an Initial packet, before decryptionCgDerive keying material from this connection\xe2\x80\x99s TLS \xe2\x80\xa6EdFill output with output.len() bytes of keying material \xe2\x80\xa60BnPathological case: many segments, get from endCfGet segments in the old way, using a loop of get callsClCurrent number of remotely initiated streams that may be \xe2\x80\xa6ClTrack changes on our external address as reported by the \xe2\x80\xa60CmCreate a client configuration that trusts specified trust \xe2\x80\xa60BkThe peer didn\xe2\x80\x99t give us any certificates.0BkThe peer sent an oversized record/fragment.0CkThe ack-eliciting threshold we will request the peer to use0BiWhether there are any pending retransmitsCdWhether the Multipath for QUIC extension is enabled.C`Sets the keep_alive_interval for a specific pathBoSet a custom ValidationTokenConfig0BmPath abandoned at the application\xe2\x80\x99s request0CjGet the current value of max_udp_payload_size0ChConfigure how to populate the destination CID of the \xe2\x80\xa60CjConstruct an endpoint with arbitrary configuration and \xe2\x80\xa6CfWhether the socket address that is initiating this \xe2\x80\xa60CmModify the number of open paths allowed when multipath is \xe2\x80\xa6Cmthe number of connection IDs provided by the peer exceeds \xe2\x80\xa60CbError returned by Session::export_keying_material.0CiA provided certificate revocation list (CRL) was invalid.0CmPath abandoned due to no available connection IDs for the \xe2\x80\xa60Clreceived transport parameters that were badly formatted, \xe2\x80\xa60CiRegisters one address at which this endpoint might be \xe2\x80\xa6ClAdd addresses the local endpoint considers are reachable \xe2\x80\xa6ClMaximum number of outgoing application datagram bytes to \xe2\x80\xa60CiSet the client configuration used by connectBmSets the max_idle_timeout for a specific pathBfThe QUIC protocol version implemented.CfThe path became unusable after a local network change.BoBytes available in the outgoing datagram bufferDhMaximum number of received bytes to buffer for all Incoming0DaVariant of max_concurrent_bidi_streams affecting \xe2\x80\xa60ClModify the number of remotely initiated streams that may \xe2\x80\xa6CnCreate a client configuration that trusts the platform\xe2\x80\x99s \xe2\x80\xa60CkGenerates 8-byte connection IDs that can be efficiently \xe2\x80\xa6CkAn error occurred while handling Encrypted Client Hello \xe2\x80\xa60CkPath abandoned due to resource limitations in the transport0CiGenerates purely random connection IDs of a specified \xe2\x80\xa6ChWhether to use \xe2\x80\x9cGeneric Segmentation Offload\xe2\x80\x9d to \xe2\x80\xa60CmMaximum number of incoming bidirectional streams that may \xe2\x80\xa60BhUpdates this tuple\xe2\x80\x99s local address iffClMaximum number of incoming application datagram bytes to \xe2\x80\xa60BcInitiates a new nat traversal round0BdPackets were incorrectly deemed lost0CnRemoves one or more addresses from the set of addresses at \xe2\x80\xa6CgRemoves an address the endpoing no longer considers \xe2\x80\xa6C`Sets the keep_alive_interval for a specific pathDeA ConnectionIdParser implementation that assumes the \xe2\x80\xa6CjWe received a TLS handshake message that isn\xe2\x80\x99t valid \xe2\x80\xa60CiHow to construct new congestion::Controllers0BlSets a default per-path maximum idle timeout0BoThe key exchange group negotiated with the peer0CbWhether to send observed address reports to peers.0CiModify the number of remotely initiated bidirectional \xe2\x80\xa6BiEnables the Multipath Extension for QUIC.0CjModify the number of remotely initiated unidirectional \xe2\x80\xa6CeNumber of consecutive PTOs after which network is \xe2\x80\xa60BkSets a default per-path keep alive interval0CjWhether to receive observed address reports from other \xe2\x80\xa60BmGet the current local nat traversal addresses0CkGet the currently advertised nat traversal addresses by \xe2\x80\xa60AcNat traversal draftCkSets the maximum number of nat traversal addresses this \xe2\x80\xa60CjWhen multipath is required and has not been explicitly \xe2\x80\xa6") \ No newline at end of file diff --git a/pr/547/docs/search.index/desc/71b9fd100c6a.js b/pr/547/docs/search.index/desc/71b9fd100c6a.js new file mode 100644 index 000000000..ef87bdafd --- /dev/null +++ b/pr/547/docs/search.index/desc/71b9fd100c6a.js @@ -0,0 +1 @@ +rd_("AmData flows in both directions0CdThe CE codepoint, signalling that congestion was \xe2\x80\xa600AjContains the success valueBeThe PathId of this path.BmReturns the PathId of this path.AoGet the identity of this stream00AfWhich path is now openAhWith path was abandoned.B`Which path had its state droppedAmPath which has changed statusCfPath over which the observed address was reported, \xe2\x80\xa6AlWhich stream is now readableAlWhich stream is now writableAnWhich stream has been finishedAmWhich stream has been stoppedAnType of the Long header packetBcExperimental! Use at your own risk.0ClWhether a stream communicates data in both directions or \xe2\x80\xa60AhContains the error valueAoThe largest representable valueAlThe maximum path ID allowed.10ClConnects to a QUIC perf server and maintains a specified \xe2\x80\xa6BmData flows only from the stream\xe2\x80\x99s initiator0AnWhich directions data flows in0CaDirectionality for which streams have been openedCdDirectionality for which streams are newly availableCjExplicit congestion notification bits to set on the packet0CeThe Explicit Congestion Notification bits for the \xe2\x80\xa61CkReturns the most recently observed external address, or \xe2\x80\xa6B`The current best RTT estimation.BfThe number of I/O operations executed.0BcLength of QUIC packet being decodedAlLength of the packet payload0BmThe number of bytes the associated buffer hasBbSet a custom TokenLog0CaMinimum RTT registered so far for this estimator.ClConstruct with an approximate maximum memory usage and a \xe2\x80\xa6CjConstruct an endpoint with arbitrary configuration and \xe2\x80\xa6DiCreates a new QlogConfig that writes a qlog trace to the \xe2\x80\xa6CiCreates a new qlog factory that writes files into the \xe2\x80\xa6D`Create a default config with a particular reset_keyCmCreate a default config with a particular handshake token \xe2\x80\xa6CkCreate a default config with a particular cryptographic \xe2\x80\xa6AmConstruct cid from byte arrayoConstruct emptyAeCreate a new StreamIdDjConstruct a state using the given config and current time \xe2\x80\xa600:8AeCreate a new endpointDcCreate a new instance of FixedLengthConnectionIdParserBdCreate a generator with a random key:987DgBegin decoding a QUIC packet from bytes, returning any \xe2\x80\xa67BkConstruct an error with a code and a reasonCgInitialize Random CID generator with a fixed CID length87BeCreates a new FourTuple.777BfQUIC transport protocol implementationCkGet SystemTime::now() or the mocked equivalentAhLook up the current time01ChCurrent best estimate of this connection\xe2\x80\x99s latency \xe2\x80\xa6000ChThe ECT(0) codepoint, indicating that an endpoint is \xe2\x80\xa600ChThe ECT(1) codepoint, indicating that an endpoint is \xe2\x80\xa600CaA complete set of keys for a certain packet space0CbA Long packet header, as used during the handshakeChNot attributed to any particular FrameType.CkAn open network transmission within a multipath-enabled \xe2\x80\xa6Ab(Multi)Path eventsB`An error occurred during readingCeWhether an endpoint was the initiator of a connection0nThe 0 path id.0CaThe address observed by the remote over this pathCjThe source address of the datagram(s) contained in the \xe2\x80\xa6mType of errorBlCurrent congestion window of the connection.0gPayloadAoReturns the argument unchanged.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BaCalls U::from(self).00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dNextCoMethod for opening a sealed message data in-place.B`Open a single stream if possible1CgReturns the Path structure of an open pathBhPing the remote endpoint over this path.AhPing the remote endpointCkCheck whether the timer has expired, and register to be \xe2\x80\xa6BaReturns application-facing eventsBgRead data contiguously from the stream.AoRead from the given recv streamCcDecode TransportParameters from bufferBiReceive an unreliable, unordered datagramBdMethod for sealing a token in-place.0CiQueue an unreliable, unordered datagram for immediate \xe2\x80\xa6CbSends a Transmit on the given socket.CmNumber of address validation tokens sent to a client when \xe2\x80\xa60BmThe side of the connection (client or server)ChLook up whether we\xe2\x80\x99re the client or server of this \xe2\x80\xa6AlMethod for signing a message0CdAmount of data written to the caller-supplied buffer0hSpin bitAcStop accepting data0BoStop accepting data on the given receive streamCiTry to find and take a token that was stored with the \xe2\x80\xa60BgA chunk of data from the receive stream0CiThe RFC8312 congestion controller, as widely used for TCP0Borustls reports protocol errors using this type.0DbErrors encountered while decoding TransportParametersCdErrors that the nat traversal state might encounter.BeEvents of interest to the applicationCiEvent emitted when the client receives ADD_ADDRESS or \xe2\x80\xa6CjAttributed to a specific FrameType, never \xe2\x80\xa6A`Any other error.0CcThe peer abandoned transmitting data on this streamCnThe peer is unable to continue processing this connection, \xe2\x80\xa6CdThe peer abandoned transmitting data on this stream.1AeA Retry packet headerCdA short packet header, as used during the data phaseCmBest-effort extraction of the ALPN protocols from the TLS \xe2\x80\xa6BiConstruct a fresh Controller0AiThe contents of the chunkCiThe total amount of bytes which have been transferred \xe2\x80\xa6BjThe amount of bytes which had been written210BnUnderlying error describing reason for failureBaClose the connection immediately.CnClose all of this endpoint\xe2\x80\x99s connections immediately and \xe2\x80\xa6AaCloses this path.AnClose a connection immediatelyBcFrame type that triggered the errorCcDistinguishes streams of the same initiator and \xe2\x80\xa60CjReturns whether the codepoint is a CE, signalling that \xe2\x80\xa60AgKey for encrypting data0BgParse a connection id from given bufferAhReturns all known paths.BlUpdate the timer to expire at iBbClose the send stream immediately.BeAbandon transmitting data on a streamCnRespond with a retry packet, requiring the client to retry \xe2\x80\xa60CiDrive future to completion in the backgroundCeShow connection stats the at the end of the benchmarkAmReturns connection statisticsBiReturns relevant stats from this EndpointCaReturns the PathStats for this path.2BcTitle to record in the qlog capture0CmWrite a buffer into this stream, returning how many bytes \xe2\x80\xa6AmSend data on the given streamCcEncode TransportParameters into bufferC`Future produced by Endpoint::acceptClPaths marked as backup will only be used if there are no \xe2\x80\xa6CeChunks returned from RecvStream::read().AmThe initiator of a connectionAdRun as a perf client1CgAttempted to initiate NAT traversal on a closed, or \xe2\x80\xa6BcThe receiver lagged too far behind.CcFuture produced by Connection::open_biAjA new path has been openedChOne or more new streams has been opened and might be \xe2\x80\xa6ChId representing different paths when using multipath \xe2\x80\xa60AbCoding result typeAlThe acceptor of a connectionAdRun as a perf server1mStream eventsAiAn integer less than 2^620CfGet the next incoming connection attempt from a clientClAttempt to accept this incoming connection (an error may \xe2\x80\xa6CcAccept a remotely initiated stream of a certain \xe2\x80\xa61C`The amount of full chunks which had been written0BlAllows to configure the desired cipher suiteCiHelper to construct an endpoint for use with outgoing \xe2\x80\xa6CcWait for the connection to be closed for any reasonAfCoding related traits.BnAccess the configuration used by this endpointChTraits and implementations for the QUIC cryptography \xe2\x80\xa6BjCreate QUIC error code from TLS alert codeBoTLS configuration used for incoming connections210BkAn underlying crypto (e.g. TLS) layer errorCgDecode a plain header from given buffer, with given \xe2\x80\xa6DiDecode a Self from the provided buffer, if the buffer is \xe2\x80\xa6ChThe destination IP address which was encoded in this \xe2\x80\xa6D`Append the encoding of self to the provided buffer.CmNotify the peer that no more data will ever be written to \xe2\x80\xa6CnFinish a send stream, signalling that no more data will be \xe2\x80\xa6B`Process an incoming UDP datagramAfHeader protection keys0ClIgnore this incoming connection attempt, not sending any \xe2\x80\xa60C`Potentially store a token for later one-time use0CfPerform NSS-compatible TLS key logging to the file \xe2\x80\xa6AhThe offset in the stream0B`Packet deliveries were confirmed0AfPacket protection keys0lRandom valueBcHuman-readable reason for the close000BhHuman-readable explanation of the reasonBeReason that the connection was closedBcReason why this path was abandoned.AjSwitch to a new UDP socketBgReject this incoming connection attempt0AgKey for decrypting dataBoReturns the remote address of the network path.1AmTLS interface based on rustls0CnHelper to construct an endpoint for use with both incoming \xe2\x80\xa6BkOptional source IP address for the datagram00CgThe current local PathStatus of this path.B`The new status set by the remoteCfThe size of a single datagram in the associated bufferCkStatistics about datagrams and bytes received on this path.ChStatistics about UDP datagrams received on a connection.10CgStatistics about datagrams and bytes sent on this path.CkStatistics about UDP datagrams transmitted on a connection.10AnMethod for verifying a message0CcNumber of ack-eliciting bytes that may be in flight0A`Send would blockCcNo more data is currently available on this stream.CjThe peer is not able to accept additional data, or the \xe2\x80\xa6BfA catch-all error for unlikely errors.0BlA key for signing with HMAC-based algorithms0AhAn Initial packet headerBnA pair of keys for bidirectional communication0BhA simple, standard congestion controller0CdFuture produced by Connection::open_uniCkAbstracts I/O and timer operations for runtime independenceBfA cryptographic session (commonly TLS)0CcThe peer is no longer accepting data on this streamCfFuture returned from SendStream::stopped.ClThe peer is no longer accepting data on this stream, and \xe2\x80\xa6CkThe peer is no longer accepting data on this stream. No \xe2\x80\xa6CgThe peer asked us to stop sending on an outgoing streamAaAccess to streamsCaThe stream is larger than the user-supplied limitCnAttributed to some frame type this implementation does not \xe2\x80\xa6ClIndicates how many bytes and chunks had been transferred \xe2\x80\xa60l0-RTT packetCjReturns the length of a CID for connections created by \xe2\x80\xa60CdProvide the length of dst_cid in short header packetCcThe total number of clients which should be createdAlConnect to a remote endpointAeInitiate a connectionBbDecrypt the Initial packet payloadCgDecrypt the packet payload with the given packet numberBcDecrypt the given packet\xe2\x80\x99s header210ClConstructs a value with arbitrary fields, intended to be \xe2\x80\xa6DjConstruct an event that indicating that a Connection will \xe2\x80\xa6BkThe destination connection ID of the packetBkThe destination Connection ID of the packetAiDestination Connection ID00000CgEncrypt the packet payload with the given packet numberBcEncrypt the given packet\xe2\x80\x99s header10CbCheck if this stream has been opened during 0-RTT.0CmRetrieve implementation-specific metrics used to populate \xe2\x80\xa60CnThe maximum UDP payload size guaranteed to be supported by \xe2\x80\xa60CjUniform interface to send and receive UDP packets with \xe2\x80\xa6BbOne or more packets were just sent0BmInitiate a new outgoing bidirectional stream.CaReturns the path ID of the new path being opened.AdSource Connection ID0000CiCompletes when the peer stops the stream or reads the \xe2\x80\xa6CjCheck if this stream was stopped, get the reason if it wasCcThe total number of streams which should be createdAlProvide control over streamsCeThe length of the AEAD tag appended to packets on \xe2\x80\xa60CdUpgrade the handle to a full ConnectionB`Upgrades to a Path.AkSet the QUIC version to use0lQUIC versionB`The version that was unsupported11CeFuture produced by Connection::accept_biAfAn unreliable datagramBdDatagram support is disabled locally0A`A QUIC endpoint.BcThe main entry point to the libraryChA finished stream has been fully acknowledged or stoppedCkAn incoming connection for which the server has not yet \xe2\x80\xa60BoLong packet types with uniform header structureB`The largest encoded value length0Cmthe connection is being closed abruptly in the absence of \xe2\x80\xa60CeFuture returned by Connection::on_closedClFuture produced by crate::Connection::open_pathCmA currently open stream likely has data or errors waiting \xe2\x80\xa6CkMetadata for a single buffer filled with bytes received \xe2\x80\xa6BkResponse generated directly by the endpointCfIdentifier for a stream within a particular connection0CnCommunication with the peer has lapsed for longer than the \xe2\x80\xa6CkWe didn\xe2\x80\x99t receive any data from the remote within the \xe2\x80\xa61ChResponsible for limiting clients\xe2\x80\x99 ability to reuse \xe2\x80\xa60ClThe datagram is larger than the connection can currently \xe2\x80\xa60AbAn outgoing packet00CmStatistics about UDP datagrams transmitted or received on \xe2\x80\xa60CnA formerly write-blocked stream might be ready for a write \xe2\x80\xa6AkCongestion algorithm to useAhContents of the datagramBoMark the read data as consumed from the stream.BnStatistics about frames received on this path.CaStatistics about frames received on a connection.10CaStatistics about frames transmitted on this path.CdStatistics about frames transmitted on a connection.10DhConstructs cid by reading len bytes from a Buf0DkCreates a new qlog factory that writes files into QLOGDIR, \xe2\x80\xa60BfCreate a generator with a specific keyBjConstruct a VarInt infallibly0BeSucceeds iff x < 2^620AeWhat type we receivedAoWhat handshake type we received10CbWhether 0-RTT is/was possible during the handshakeCmSpecifies the time to wait after completing MTU discovery \xe2\x80\xa60CcReturns Self for use in down-casting to extract \xe2\x80\xa60EhReturns true if the Connection associated with this handle \xe2\x80\xa6CmDuration after an address validation token was issued for \xe2\x80\xa60CeThe local IP address which was used when the peer \xe2\x80\xa6000BnReturns the local address of the network path.ClCompute the maximum size of datagrams that may be passed \xe2\x80\xa6BnInitiate a new outgoing unidirectional stream.BcGet the priority of the send streamAlGet the priority of a streamCfThe negotiated application protocol, if ALPN is in use0Aeqlog output directoryBbOptional response to transmit backCiOptional seed to be used internally for random number \xe2\x80\xa60AlSlow start threshold (bytes)0BeSucceeds iff x < 2^6200000DaSends a Transmit on the given socket without any \xe2\x80\xa6DkQuickly determine whether cid could have been generated by \xe2\x80\xa600BmA path was abandoned and is no longer usable.CfFuture produced by Connection::accept_uniCdPaths marked with as available will be used when \xe2\x80\xa6CnAt least one new stream of a certain directionality may be \xe2\x80\xa6ClConfiguration for the Bbr congestion controller0BkThe connection was successfully establishedAoAPI to control datagram trafficAlDecoding of QUIC primitives.CkA path was discarded and all remaining state for it has \xe2\x80\xa6BgInfallible encoding of QUIC primitives.CnIdentifies a network path by the combination of remote and \xe2\x80\xa6A`Handshake packetBcKeys used to protect packet headers0CiCatch-all error for problems while decoding transport \xe2\x80\xa6CeNat traversal attempt failed due to a multipath errorBdKeys used to protect packet payloads0BmErrors that might trigger a path being closedAnApplication events about pathsBjStatistics related to a transmission path.0AeA read error occurredBmErrors that arise from reading from a stream.C`Errors triggered when reading from a recv streamCiAn object for asynchronously writing to an associated \xe2\x80\xa6BmAccept the next incoming bidirectional streamBbDuplicate the controller\xe2\x80\x99s state0BeThe number of UDP datagrams observed.AaControl datagrams1BeCreate new object from the given bits00BoWhich side of a connection initiated the stream0CmConvert into a 0-RTT or 0.5-RTT connection at the cost of \xe2\x80\xa6BoShorthand for self == Side::Client0B`Whether the connection is closedBoShorthand for self == Side::Server0CbWhether it is legal to respond with a retry packet0CdWhether to allow clients to migrate to new addresses0CdConstruct a timer that will expire at iBoLow-level protocol logic for the QUIC protoocolCjWait for the connection to be closed without keeping a \xe2\x80\xa6CjOpens an additional path if the multipath extension is \xe2\x80\xa6A`Opens a new pathBmPing the remote endpoint over a specific pathCiAttempts to read from the stream into the provided bufferCeReceive UDP datagrams, or register to be woken if \xe2\x80\xa6CkSend a UDP datagram, or register to be woken if sending \xe2\x80\xa6ClPrivate key used to send authenticated connection resets \xe2\x80\xa60BmGenerate the integrity tag for a retry packet0BgA stable identifier for this connectionCePrivate key used to authenticate data included in \xe2\x80\xa60BlThe position of a token in the packet bufferCgTransport configuration to use for incoming connections0CjWait for all connections on the endpoint to be cleanly \xe2\x80\xa6BoWrite a buffer into this stream in its entiretyCiAbstract implementation of an async timer for runtime \xe2\x80\xa6BoNumber of UDP packets to send/receive at a timeCkError indicating that a path has not been opened or has \xe2\x80\xa6BnThe path is already closed or was never opened1BeIn-progress connection attempt futureAbA QUIC connection.CeProtocol state and logic for a single QUIC connectionCeCommon interface for different congestion controllers0CjNumber of frames transmitted or received of each frame \xe2\x80\xa60BoThe connection ID was not recognized by the \xe2\x80\xa60DdThe type used to refer to FrameTypes in closing and \xe2\x80\xa6DbA stream of PathEvents for all paths in a connection.AnThe QUIC-MULTIPATH path statusBeConfiguration for qlog trace logging.0BnA stream that can only be used to receive dataAaAccess to streamsChErrors that arise while waiting for a stream to be resetDhError for attempting to retry an Incoming which already \xe2\x80\xa60BkA stream that can only be used to send data3BmObject to get current SystemTime0AdA rustls TLS session0CkResponsible for storing validation tokens received from \xe2\x80\xa60AeA borrowed UDP socketBjErrors that arise from writing to a streamBoErrors triggered while writing to a send streamBoAccept the next incoming uni-directional streamCkWhether the implementation is permitted to set the spin \xe2\x80\xa60CiCloses a path and sends a PATH_ABANDON frame with the \xe2\x80\xa6CdLogic for controlling the rate at which data is sent0BfWhether to print connection statisticsBnClass of error as encoded in the specificationB`Application-specific reason code10CaThe error code to be sent with the abandon frame.BoThe error that was sent with the abandon frame.AoError code supplied by the peerBcType of frame that caused the close0AiExtract the integer value0CnWhether there is no longer any need to keep the connection \xe2\x80\xa6DkDetermine whether this is the last event a Connection will \xe2\x80\xa6CiLook up the local IP address and port used by this socketDgGet the local SocketAddr the underlying socket is bound toBfThe amount of bytes lost on this path.0CjPad UDP datagrams carrying application data to current \xe2\x80\xa60AgReturns path statistics0CjThe final path stats, they are no longer available via \xe2\x80\xa6C`Attempt to write bytes from buf into the stream.AmRead the next segment of dataAoReads the next segment of data.CkRead an exact number of bytes contiguously from the stream.BnSets the PathStatus of this path.BoEpoch qlog event times are recorded relative to0ClError type for attempting to accept an IncomingBjErrors in the configuration of an endpoint0AeGeneric crypto errors0CnConfiguration for the Cubic congestion controller0CdReasons why attempting to finish a stream might failCnMaximum duration of inactivity to accept before timing out \xe2\x80\xa60AnValue exceeds supported bounds0D`Constructs a QlogConfig for individual connections.0AfA noq runtime for smolB`Application events about streamsCbAccept this incoming connection using a custom \xe2\x80\xa6CeLargest UDP payload size the path currently supports.ClStorage size required for the largest packet that can be \xe2\x80\xa61BiDescription to record in the qlog capture0BjThe socket this datagram should be sent to00DcCreates a new FourTuple without a known local address.BkStarting guess for maximum UDP payload sizeCkThe initial value to be used as the maximum UDP payload \xe2\x80\xa60ChUDP payload size that the network must be capable of \xe2\x80\xa6BjThe RTT used before an RTT sample is taken0BfThe initial round-trip-time (in msecs)CeThe amount of concurrent streams which should be usedDdPackets are acked in batches, all with the same now \xe2\x80\xa60AdPacing rate (bits/s)0DeA stream of PathEvents for all paths in this connection.DfGets the local PathStatus for a known PathIdAnRead the next segments of dataCkConvenience method to read all remaining data into a bufferAlProvide control over streamsBoThe sample size used for this key\xe2\x80\x99s algorithm01CiMaximum number of bytes to transmit to a peer without \xe2\x80\xa600BoThe server name specified by the client, if any0BmObject to get current SystemTime0BdSet a custom TokenStore0CaNumber of bytes to transmit from client to serverCnSpecifies the upper bound to the max UDP payload size that \xe2\x80\xa60ChReturns a weak reference to the inner connection struct.CdReturns a WeakPathHandle for this path.DgCreate a server config with the given crypto::ServerConfig0CeSets a prefix to the filename of the generated files.0DbWrite a single Bytes into this stream in its entiretyBbAn ADD_ADDRESS frame was received.BfConfiguration for outgoing connectionsCaClient-side configuration for the crypto protocol10CgThe stream has already been stopped, finished, or resetBmThe stream has already been finished or resetCmError indicating that a stream has not been opened or has \xe2\x80\xa6CjThe stream has not been opened or was already stopped, \xe2\x80\xa6CfThe stream has not been opened or has already been \xe2\x80\xa6CmThe stream has not been opened or was already finished or \xe2\x80\xa63CgErrors in the parameters being used to create a new \xe2\x80\xa60BkProtocol-level identifier for a connection.0CkWe couldn\xe2\x80\x99t decrypt a message. This is invariably fatal.0BjExplicit congestion notification codepoint00CnWe couldn\xe2\x80\x99t encrypt a message because it was larger than \xe2\x80\xa60BhParameters that are semantically invalidCkCannot close the last remaining open path via the local \xe2\x80\xa6Akn0\xe2\x80\x99s nat traversal eventsDhNull implementation of TokenLog, which never accepts tokens0ClReceived an observation of our external address from the \xe2\x80\xa6CiFuture produced by Connection::read_datagramBiThe remote changed the status of the pathBlRTT estimation for a particular network pathCnFuture produced by Connection::send_datagram_waitBiParameters governing incoming connectionsCaServer-side configuration for the crypto protocol10CmErrors that arise while monitoring for a send stream stop \xe2\x80\xa6AgA noq runtime for TokioC`Returns the lifetime of generated Connection IDs0BlIf the connection is closed, the reason why.CjConnect to a remote endpoint using a custom configuration.AlConservative estimate of RTTBnGet the 0-RTT keys if available (clients only)0AgWhich types we expectedB`Which handshake type we expected10AcGenerates a new CID0ClThe number of segments to read when GRO is enabled. Used \xe2\x80\xa6DeProcess ConnectionEvents generated by the associated \xe2\x80\xa6EaProcess EndpointEvents emitted from related ConnectionsCgCreate the initial set of keys given the client\xe2\x80\x99s \xe2\x80\xa6000BhThe amount of packets lost on this path.0DcMaximum number of Incoming to allow to exist at a time0CjWhether datagrams might get fragmented into multiple parts0CmWhether transmitted datagrams might get fragmented by the \xe2\x80\xa6CkReturns the path\xe2\x80\x99s network path represented as a 4-tuple.CkThe original destination CID when initiating the connectionCiThe original destination connection ID sent by the clientDhReturns the next time at which handle_timeout should be \xe2\x80\xa6D`Configures qlog capturing by setting a QlogFactory.0AgThe runtime type to useCkThe segment size if this transmission contains multiple \xe2\x80\xa600ChThe number of streams that may have unacknowledged data.CbSet the lifetime of CIDs created by this generator0BcSet the priority of the send streamAlSet the priority of a streamCnInitialize a QUIC-compatible TLS client configuration with \xe2\x80\xa6000DgWrite a slice of Bytes into this stream, returning how \xe2\x80\xa6AmSend data on the given streamCkWe received a fatal alert. This means the peer is unhappy.0BhBloom filter-based TokenLog0CmThe connection could not be created because not enough of \xe2\x80\xa6000CaEvent resulting from processing a single datagramBlEvents sent from a Connection to an EndpointAoStatistics on Endpoint activityBnThe stream finished before all bytes were readBlAuthentication data for (rustls) TLS session0Ccreceived an invalid Retry Token in a client Initial0ChIterator over ALPN protocol names from a TLS ClientHelloAlThe packet header is invalidBkThe local application closed the connection0DaThe datagram may result in starting a new ConnectionD`Configuration for the NewReno congestion controller0BjDecodes a QUIC packet\xe2\x80\x99s invariant headerCgErrors triggered when opening a recv stream for readingCaDefault implementation of TimeSource0CgError indicating that the provided buffer was too smallChFor clients, if the peer accepted the 0-RTT data packetsAbAck Frequency modeAfExports for benchmarksBoSupply a custom connection ID generator factory0DgCreate a UdpSender that can register a single task for \xe2\x80\xa6CaNumber of bytes to transmit from server to clientAmGet the Incoming0CnThe max_ack_delay we will request the peer to use0CgDisable packet encryption/decryption (for debugging \xe2\x80\xa6CkThe known MTU for the current network path has been updated0BbCryptographic identity of the peerBgGet the peer\xe2\x80\x99s identity, if availableDhFor the rustls TlsSession, the Any type is \xe2\x80\xa610CnAttempts to read from the stream into the provided buffer, \xe2\x80\xa6AkReturns packets to transmitDjConfigures qlog capturing through the QLOGDIR environment \xe2\x80\xa60AoReceive an application datagramDfTransmit data as an unreliable, unordered application \xe2\x80\xa6CmWhether to implement fair queuing for send streams having \xe2\x80\xa60BfLength of sign\xe2\x80\x99s output0BnStart a client session with this configurationBnStart a server session with this configuration10BdA REMOVE_ADDRESS frame was received.CgAbstract implementation of a UDP socket for runtime \xe2\x80\xa6BgErrors triggered when abandoning a pathAgThe connection was lost00000ChGlobal configuration for the endpoint, affecting all \xe2\x80\xa60Cithe endpoint encountered an internal error and cannot \xe2\x80\xa60FbBasic adapter to let Incoming be await-ed like a ConnectingBhEncounter a frame ID that was not valid.CeThe peer sent us a TLS message with invalid contents.0Amno viable network path exists0DhNull implementation of TokenStore, which does not store \xe2\x80\xa60CiThe peer deviated from the standard TLS protocol. The \xe2\x80\xa60BmErrors that arise from reading from a stream.C`Errors from RecvStream::read_to_endCaIndicates whether a frame needs to be transmittedCmThe peer violated the QUIC specification as understood by \xe2\x80\xa60CiTransport-level errors occur when a peer violates the \xe2\x80\xa6C`Tokio-compatible UDP socket with some useful \xe2\x80\xa6DiWeak handle for a Path that does not keep the connection \xe2\x80\xa6BnCreate a client endpoint and client connectionAgGet a session referenceDiReturns a QlogConfig for a connection, if logging should \xe2\x80\xa60AiProcess timer expirationsBjParameters negotiated during the handshake0CfGet data negotiated during the handshake, if available0AiInitial congestion windowCiDefault limit on the amount of outstanding data in bytes.001000BnConverts this stream into an unordered stream.DdReturns true until the connection is fully established.CeWhether the connection is in the process of being \xe2\x80\xa61BfVerify the integrity of a retry packet0CnSpecifies the minimum MTU change to stop the MTU discovery \xe2\x80\xa60BdCompute keys for the next key update0BkConfigures qlog capturing into a directory.0AlRead bytes of handshake data0BeWhether to use the unordered read APIClMaximum number of bytes the peer may transmit across all \xe2\x80\xa600CkCompletes when the stream has been reset by the peer or \xe2\x80\xa60CiCheck whether this stream has been reset by the peer, \xe2\x80\xa6AjThe peer\xe2\x80\x99s UDP addressesAhThe peer\xe2\x80\x99s UDP address0BgThe peer\xe2\x80\x99s UDP address for this path.1CeSaturating integer addition. Computes self + rhs, \xe2\x80\xa6000ChSaturating integer subtraction. Computes self - rhs, \xe2\x80\xa60CkMaximum reordering in time space before time based loss \xe2\x80\xa60ChReason given by the transport for closing the connection0BfReasons why a connection might be lost0CiThe datagram is redirected to its ConnectionBlEvents sent from an Endpoint to a ConnectionAfConnection statistics.0BiStatistics for the currently open streamsAcPlain packet headerBkEnables writing qlog traces to a directory.0AkThe remote closed the path.CfError for when a validation token may have been reused0C`Parameters governing the core QUIC state machine0CbThe peer doesn\xe2\x80\x99t implement any supported version0CdFuture that completes when a connection is fully \xe2\x80\xa6CbThis was a 0-RTT stream and the server rejected it000CjAutomatically select an appropriate runtime from those \xe2\x80\xa6CkWhether to accept QUIC packets containing any value for \xe2\x80\xa60CdMaximum number of incoming packets that may fail \xe2\x80\xa60CnThe interface index of the interface on which the datagram \xe2\x80\xa6AjSwitch to a new UDP socketCiCreates a server endpoint which runs on the given runtimeD`Sets the PathStatus for a known PathIdCfSee proto::TransportConfig::send_window()BoSee TransportConfig::send_window()BmReturns whether a frame should be transmittedD`Convert t into the socket type used by this runtimeCdWrites handshake bytes into the given buffer and \xe2\x80\xa60ClStream produced by Path::observed_external_addrCiReason given by an application for closing the connection0CbThe peer\xe2\x80\x99s QUIC stack aborted the connection \xe2\x80\xa60DjInternal identifier for a Connection currently associated \xe2\x80\xa6CdOne or more application datagrams have been receivedBjDecrypted payload of a QUIC Initial packetCaThe endpoint can no longer create new connections0Cnreceived a STREAM frame or a RESET_STREAM frame containing \xe2\x80\xa60ClSpecific failure cases from keys_match or a \xe2\x80\xa60A`key update error0CaCurrent limits do not allow us to open more pathsClThe peer doesn\xe2\x80\x99t support a protocol version/feature we \xe2\x80\xa60BjA QUIC-compatible TLS client configuration0BjA QUIC-compatible TLS server configuration0EfTokenStore implementation that stores up to N tokens per \xe2\x80\xa60CgAn endpoint (local or remote) tried to add too many \xe2\x80\xa6CmWe didn\xe2\x80\x99t receive a path response in time after opening \xe2\x80\xa6CaPath could not be validated and will be abandonedBcA Version Negotiation packet headerCiRecord that the token was used and, ideally, return a \xe2\x80\xa60CjCurrent state of the congestion control algorithm, for \xe2\x80\xa6CcCurrent state of this connection\xe2\x80\x99s congestion \xe2\x80\xa6BaUpdate traffic keys spontaneously0CnThe maximum amount of segments which can be transmitted if \xe2\x80\xa6CnMaximum duration of inactivity to accept before timing out \xe2\x80\xa60Cgn0\xe2\x80\x99s (https://n0.computer) NAT Traversal protocol \xe2\x80\xa6CeGet the number of connections that are currently openBmNumber of connections that are currently openCiOpens a new path if no path exists yet for the remote \xe2\x80\xa6CmOpens a new path only if no path on the same network path \xe2\x80\xa6CiMaximum reordering in packet number space before FACK \xe2\x80\xa60CfGet the size of the socket receive bufferAlReceive buffer size in bytesCcGet the size of the socket send bufferAiSend buffer size in bytesBiSet a custom TransportConfig000ChConfiguration for sending and handling validation tokens0CnCreate a server config with the given certificate chain to \xe2\x80\xa60DdWrite a slice of Bytes into this stream in its entiretyCfthe application or application protocol caused the \xe2\x80\xa60AnThe peer closed the connectionBoThe path was closed locally by the application.1B`Constructs controllers on demand0BdCommon congestion controller metrics0ClThe trait for encrypting tokens that power retry packets \xe2\x80\xa60BcThe given server name was malformed0CbHints when the caller identifies a network change.0AcPacket decode errorBdReason for why a path was abandoned.BmErrors that can arise when sending a datagram0CcThe peer does not support receiving datagram frames0BdCongestion events on the connection.0AiCongestion window (bytes)0ClCompute the maximum size of datagrams that may be passed \xe2\x80\xa6BoBytes available in the outgoing datagram bufferClReplace the server configuration, affecting new incoming \xe2\x80\xa60Cmthe endpoint has reached the confidentiality or integrity \xe2\x80\xa60CkParameters for controlling the peer\xe2\x80\x99s acknowledgement \xe2\x80\xa60DjThe max_fragment_size value supplied in configuration was \xe2\x80\xa60Bmthe server refused to accept a new connection0BjParse connection id in short header packetCjOne or more application datagrams have been sent after \xe2\x80\xa6Ckreceived more data than permitted in advertised data limits0AoThe TLS handshake was confirmedBjThe connection\xe2\x80\x99s handshake data is readyCeAttempted an ordered read following an unordered readAnWe saw an invalid certificate.0BcParameters governing MTU discovery.0BnNot enough addresses to complete the operationCkdetected an error with protocol compliance that was not \xe2\x80\xa60Cjreceived a frame for a stream identifier that exceeded \xe2\x80\xa60Cnreceived a frame for a stream that was not in a state that \xe2\x80\xa60AnError from setting path statusAjTransport-level error code0ChThe local endpoint does not support the QUIC version \xe2\x80\xa6CkError indicating that the specified QUIC version is not \xe2\x80\xa61C`Packet uses a QUIC version that is not supported1CiMaximum quantity of out-of-order crypto layer data to \xe2\x80\xa60C`Create a VarInt without ensuring it\xe2\x80\x99s in range0ChCumulative number of Quic handshakes ignored on this \xe2\x80\xa6EgReturns true if the two WeakConnectionHandle point at the \xe2\x80\xa6CiMinimum interval between outgoing stateless reset packets0CjConstruct with an approximate maximum memory usage and \xe2\x80\xa60ChCumulative number of Quic handshakes refused on this \xe2\x80\xa6AnReturns the remote path statusDfTransmit data as an unreliable, unordered application \xe2\x80\xa6CnUpdates the set of ALPN protocols configured in the client \xe2\x80\xa6CnUpdates the set of ALPN protocols configured in the server \xe2\x80\xa610CiSee proto::TransportConfig::receive_window()CbSee TransportConfig::receive_window()B`Override supported QUIC versions0CiOverride the instant relative to which all events are \xe2\x80\xa60CcA stream of NAT traversal updates for a connection.BkNo remote CIDs available to open a new pathCkTransport parameters used to negotiate connection-level \xe2\x80\xa6CgA stream that can be used to receive data out-of-order.CmThe certificate verifier doesn\xe2\x80\x99t support the given type \xe2\x80\xa60CfThe operation is not allowed for this endpoint\xe2\x80\x99s \xe2\x80\xa6CiCumulative number of Quic handshakes accepted by this \xe2\x80\xa6CjSpecifies the amount of time that MTU discovery should \xe2\x80\xa60CiIf the 0-RTT-encrypted data has been accepted by the peer0BgWait for the handshake to be confirmed.CgInform the connection if a path may recover after a \xe2\x80\xa60CgPeriod of inactivity before sending a keep-alive packet0CfThe number of PLPMTUD probe packets lost on this path.0BlPackets were deemed lost or marked congested0CgCumulative number of Quic handshakes sent from this \xe2\x80\xa6CnThe number of remotely initiated open streams of a certain \xe2\x80\xa6AhBench fns for SendBufferCfThe number of PLPMTUD probe packets sent on this path.0Bireceived a frame that was badly formatted0CkThis function doesn\xe2\x80\x99t work until the TLS handshake is \xe2\x80\xa60CkWe received a TLS message that isn\xe2\x80\x99t valid right now. \xe2\x80\xa60CiThe remote SocketAddr supplied was malformedCkThe remote address for the path is not supported by the \xe2\x80\xa61ChThe initial cipher suite (AES-128-GCM-SHA256) is not \xe2\x80\xa60CnWatches the external address reported by the peer for this \xe2\x80\xa6BdPaths can only be opened client-sideDmError returned when constructing a VarInt from a value >= \xe2\x80\xa60CeA handle to some connection internals, use with care.DkSpecifies the ACK frequency config (see AckFrequencyConfig \xe2\x80\xa60CjThe number of times a black hole was detected in the path.0CgMaximum number of received bytes to buffer for each \xe2\x80\xa60AeIs multipath enabled?ClMaximum number of datagrams that might be described by a \xe2\x80\xa60CkMaximum UDP payload size accepted from peers (excluding \xe2\x80\xa60AmMax UDP payload size in bytesDkSpecifies the MTU discovery config (see MtuDiscoveryConfig \xe2\x80\xa60AmReturn endpoint-facing eventsCkThe preferred IPv4 address that will be communicated to \xe2\x80\xa60CkThe preferred IPv6 address that will be communicated to \xe2\x80\xa60ChThe reordering threshold we will request the peer to use0ClDuration after a retry token was issued for which it\xe2\x80\x99s \xe2\x80\xa60C`Sets the keep_alive_interval for a specific pathDfResize the receive buffer of socket to bytesDcResize the send buffer of socket to bytesBfThe peer\xe2\x80\x99s QUIC transport parametersBdQUIC connection transport parameters1CaGenerates connection IDs for incoming connections0CdAn incoming connection did not support any known \xe2\x80\xa60BjNo default client configuration was set up0BiPath abandoned due to unstable interfaces0ClConfiguration for sending and handling validation tokens \xe2\x80\xa60CmMaximum number of packets that may be sent using a single \xe2\x80\xa60CiNotify connections that the local network address has \xe2\x80\xa6ChHandle a change in the local address, i.e. an active \xe2\x80\xa6CiCounter for the number of bytes currently used in the \xe2\x80\xa6CgReturns whether we think the other address probably \xe2\x80\xa6CkReduction in congestion window when a new loss event is \xe2\x80\xa60DdMaximum number of datagrams that a Transmit may encode.0CfA stream of NAT traversal updates for this connection.CjGet the address observed by the remote over the given pathCiMaximum number of bytes the peer may transmit without \xe2\x80\xa600Chreceived more data in CRYPTO frames than can be buffered0B`The extension was not negotiatedCbWe failed to figure out what time it currently is.0CbWe failed to acquire random bytes from the system.0CnError indicating that this operation requires multipath to \xe2\x80\xa6BnThe extension was not negotiated with the peerAkMultipath is not negotiatedCnError when the multipath extension was not negotiated, but \xe2\x80\xa6CjThe path was opened in a NAT traversal round which was \xe2\x80\xa6BnHeader of an Initial packet, before decryptionCgDerive keying material from this connection\xe2\x80\x99s TLS \xe2\x80\xa6EdFill output with output.len() bytes of keying material \xe2\x80\xa60BnPathological case: many segments, get from endCfGet segments in the old way, using a loop of get callsClCurrent number of remotely initiated streams that may be \xe2\x80\xa6ClTrack changes on our external address as reported by the \xe2\x80\xa60CmCreate a client configuration that trusts specified trust \xe2\x80\xa60BkThe peer didn\xe2\x80\x99t give us any certificates.0BkThe peer sent an oversized record/fragment.0CkThe ack-eliciting threshold we will request the peer to use0BiWhether there are any pending retransmitsCdWhether the Multipath for QUIC extension is enabled.C`Sets the keep_alive_interval for a specific pathBoSet a custom ValidationTokenConfig0BmPath abandoned at the application\xe2\x80\x99s request0CjGet the current value of max_udp_payload_size0ChConfigure how to populate the destination CID of the \xe2\x80\xa60CjConstruct an endpoint with arbitrary configuration and \xe2\x80\xa6CfWhether the socket address that is initiating this \xe2\x80\xa60CmModify the number of open paths allowed when multipath is \xe2\x80\xa6Cmthe number of connection IDs provided by the peer exceeds \xe2\x80\xa60CbError returned by Session::export_keying_material.0CiA provided certificate revocation list (CRL) was invalid.0CmPath abandoned due to no available connection IDs for the \xe2\x80\xa60Clreceived transport parameters that were badly formatted, \xe2\x80\xa60CiRegisters one address at which this endpoint might be \xe2\x80\xa6ClAdd addresses the local endpoint considers are reachable \xe2\x80\xa6ClMaximum number of outgoing application datagram bytes to \xe2\x80\xa60CiSet the client configuration used by connectBmSets the max_idle_timeout for a specific pathBfThe QUIC protocol version implemented.CfThe path became unusable after a local network change.BoBytes available in the outgoing datagram bufferDhMaximum number of received bytes to buffer for all Incoming0DaVariant of max_concurrent_bidi_streams affecting \xe2\x80\xa60ClModify the number of remotely initiated streams that may \xe2\x80\xa6CnCreate a client configuration that trusts the platform\xe2\x80\x99s \xe2\x80\xa60CkGenerates 8-byte connection IDs that can be efficiently \xe2\x80\xa6CkAn error occurred while handling Encrypted Client Hello \xe2\x80\xa60CkPath abandoned due to resource limitations in the transport0CiGenerates purely random connection IDs of a specified \xe2\x80\xa6ChWhether to use \xe2\x80\x9cGeneric Segmentation Offload\xe2\x80\x9d to \xe2\x80\xa60CmMaximum number of incoming bidirectional streams that may \xe2\x80\xa60BhUpdates this tuple\xe2\x80\x99s local address iffClMaximum number of incoming application datagram bytes to \xe2\x80\xa60BcInitiates a new nat traversal round0BdPackets were incorrectly deemed lost0CnRemoves one or more addresses from the set of addresses at \xe2\x80\xa6CgRemoves an address the endpoing no longer considers \xe2\x80\xa6C`Sets the keep_alive_interval for a specific pathDeA ConnectionIdParser implementation that assumes the \xe2\x80\xa6CjWe received a TLS handshake message that isn\xe2\x80\x99t valid \xe2\x80\xa60CiHow to construct new congestion::Controllers0BlSets a default per-path maximum idle timeout0BoThe key exchange group negotiated with the peer0CbWhether to send observed address reports to peers.0CiModify the number of remotely initiated bidirectional \xe2\x80\xa6BiEnables the Multipath Extension for QUIC.0CjModify the number of remotely initiated unidirectional \xe2\x80\xa6CeNumber of consecutive PTOs after which network is \xe2\x80\xa60BkSets a default per-path keep alive interval0CjWhether to receive observed address reports from other \xe2\x80\xa60BmGet the current local nat traversal addresses0CkGet the currently advertised nat traversal addresses by \xe2\x80\xa60AcNat traversal draftCkSets the maximum number of nat traversal addresses this \xe2\x80\xa60CjWhen multipath is required and has not been explicitly \xe2\x80\xa6") \ No newline at end of file diff --git a/pr/547/docs/search.index/root.js b/pr/547/docs/search.index/root.js index 3410e1514..7a1c18dfa 100644 --- a/pr/547/docs/search.index/root.js +++ b/pr/547/docs/search.index/root.js @@ -1 +1 @@ -rr_('{"normalizedName":{"I":"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","N":"ADBd","E":"OjAAAAAAAAA=","H":"3jpX1T07"},"crateNames":{"N":"j","E":"OjAAAAAAAAA=","H":"JFDJy0NX"},"name":{"N":"ADBd","E":"OjAAAAAAAAA=","H":"7bFmUNOn"},"path":{"N":"BAo","E":"OzAAAAEAAAQSugACAAQACQAAAAsAZQByAAEAeQAAAH8ABACKAAEAjQAFAJQAGwCyAOsAoAEIAKoBJADQAQ4A4wEAAOcBBQDzAQEA9wECAPsBAAAAAgUACAI8AkYEAABIBBIAXAQCAGAEAwBlBAoAcQQJAIUEAACXBAIAmwQDAKAEAACiBAAApwQAAKkEAACsBJoASAUBAEwFCABWBQgAYAUCAGYFCABzBQIAdwUEAH8FBQCNBQEAmQUCAJ0FAgCkBe0AkwYEAJkGAACbBgAAngY8ANwGDwDuBgMA8wYDAPgGGAASBwwAJAcBACgHAAAtBwEAMQcAADMHAwA/BwAAQQcCAEYHAABJBwAATAd0AMIHBQDKBwYA0gfzAMgIAADKCAEAzggBANUIAADbCAUA5QgAAOcIAADqCAIA8AgBAPkIBQABCR0AIAkUADcJgQK6CwAAwQsBAMcLAADMCwAA0gsAANYLAwDiCwAA6gsJAPULBwD+CxkAGQwQACsMTQB6DAMAggwAAIQMAQCcDAEAugx3ATQOAgA5DhsBVg8AAGEPAQBnDwMAbQ8BAHAPAQBzDwEAeg8DAH8PQQDCDwIAxw8WAOQPAQDnDwIA8g8BAPcPBAD9DwIABBAEAAsQAAAaEBIALhAeAE4QHgBvEAMAdxAAAHoQAQB9EAEAgBAHAIwQAQCREAEAlxADAJwQAACeEAIAohA4AOEQBQDqEAEA7xAFAPgQBQACEQEABxFQAFkRAABdEQAAYhEBAGURAQBsEQAAdREBAHgRAwB9EaEAIBIAACISAAAlEgEAKBIAACsSAwAwEgoAPBIBAEQSAgBIEhgAYhIXAHsSAgCEEgEAjhIRAKESAgCmEgMAqxIHALUSAwC6EgUAxBICAMoSAADMEgEAzxIbAOwSAgDxEgQA+BIfABoTCwAoEwQAMBMAADYTJQBdEwQAZRMFAG0TGgCJEwIAjhMQAKETFwC7EwoAyRMFANATFADmEwMA6xMXAAYUHQA=","H":"tf4W8H1m"},"entry":{"N":"ACAl","E":"OjAAAAEAAAAAAAcBEAAAAAAAAQAHAAgACgBxAHQAdQB2AHoAewCEAIgAiQCMAJMAsACxAJ4BnwGpAd8B4AHhAeIB5AHlAeYB7QHuAe8B8gH1AfoB/AH/AQYCRQRbBF8EZARwBHsEfAR9BH4EgQSCBIYEhwSIBIkEigSLBIwEjQSOBI8ElASaBJ8EoQSjBKYEqASqBEcFSgVLBVUFXwVjBWQFZQVvBXAFcQVyBXwFfQWFBYYFhwWIBYsFjAWPBZAFkwWUBZUFlgWXBZwFoAWhBZIGmAaaBpwGnQbbBuwG7QbyBvcGEQcfByAHIQciByMHKQcsBzcHOAc5BzoHPgdFB0cHSAfIB8kH0QfHCM0I0AjRCNQI2AjZCOMI5AjtCPcI+Aj/CAAJHwk1CbkLvAu9C74LvwvAC8ULyAvLC84L1QvcC94L5QvmC+gL6Qv0C/0LKgx5DH4MgAyBDIMMhwyJDI4MjwySDJUMlgyYDJkMmgybDJ8MowypDKwMrQyvDLAMMg4zDjcOOA5ZD1wPZg91D3kPwQ/FD8YP3g/fD+sP7g/8DwAQAxAKEAwQDxAQEBUQFhAZEC0QTRBzEHwQihCOEI8QkxCbEJ0Q3BDdEN8Q4BDpEO4Q9xBhEWcRaxFtEW4RcRF0EXwRJBIpEi8SOxJHEmESehKIEooSuRLAEsESwhLJEusSGBMZEyYTJxMxEzQTXBNkE58ToBPGE88TBBQFFA==","H":"JlQ7lQg1"},"desc":{"N":"FNi","E":"OzAAAAEAADoNgQEAAAEABwABAAoAVgBvAAAAcQAFAHkAAwCEAAEAhwACAIwAGwCwAOsAngEBAKkBAgDMAQIA0AEBANUBAQDYAQAA3QEJAO0BAgDyAQAA9QEAAPgBAgD8AQAA/wEAAAICAQAGAgEADAIGACwCAAA6AgIAPwIBAEYCAwBRAgQAWgIAAGECAQBkAgAAaQIAAHACAQBzAgAAdwIAAHoCAACAAgAAjQIAAJICCgC1AgMAugIAAL8CAADSAgAA2AIAAN4CAADkAgEA6wIAAPECAAD5AgAAAAMBAAgDAAAPAwAAEwMAABgDAwAdAwYAMAMAAD8DFAA7BAQAQQQAAEUEAABHBAAASQQAAEsEAABNBAwAWwQAAF8EAABhBAAAZAQAAG0EAABwBAAAdgQBAHkEBQCBBAEAhQQKAJQEAACaBAAAnwQAAKEEAACjBAUAqgQBAK0EAgCxBAMAvASGAEcFBABUBQEAVwUCAF8FAABhBQUAbAUAAG8FAwB3BQMAfAUBAIMFBQCLBQEAjwUBAJMFBACcBQEAnwUCAKgF5gCSBgEAlQYBAJgGAACaBgAAnAYBAKAGAACkBgAApwYIALEGAQC1BgsAxAYAAMsGAQDOBgEA1AYCANgGAwDsBgIA8AYAAPIGAQD1BgsABgcBABEHAAAVBwIAGQcCAB8HBAApBwAALAcCADEHAAAzBwcAPgcAAEUHAABHBwEATwcAAFIHGQB0BzAApgcBALgHAgC8BwIAwwcAAMUHAADIBwEA0QcAANMHAADXB+YAxwgEAM0IAADQCAEA1AgAANgIAQDfCAEA4wgBAO0IAAD3CAEA/AgEAA8JAQAZCQQAHwkAACMJAgAnCQIAMgkBADUJAgBDCboA/wkAAAIKTQBTCmABuAsBALwLBADFCwEAyAsAAMsLAADOCwAA0AsBANULAADXCwEA3AsAAN4LAADlCwEA6AsBAOsLCQD2CwIA+gsDAAEMAQAJDAAAFAwDABwMAQAfDAUAKAwCAC4MAAAwDAUANww+AHkMAAB+DAAAgAwBAIMMAACHDAAAiQwAAI4MAQCSDAAAlQwBAJgMBQCfDAAAowwAAKkMAACsDAQAuwwFAMMMbQEyDgEANw73AEAPAABGDwIASg8CAFMPAQBWDwMAXA8AAGEPAQBmDwAAaQ8BAG0PBABzDwIAdw8CAHsPAwCPDw8AoA8BAKMPAAClDwEAqQ8TAMEPAADFDwEA2w8BAN4PAQDrDwAA7g8AAPEPAAD6DwMAABAAAAMQAAAFEAMAChAAAAwQAAAPEAEAFRABABkQBQAhEAEAJhACACoQAAAsEAEANBABADsQAQA/EAQATBACAFEQAQBWEAEAYRADAHMQAAB6EAIAgxADAIoQAACMEAMAkRACAJgQAQCbEAAAnRAAAKEQAACjEAIAqxACAK8QAgCzEAYAwBAAAMwQAQDQEAkA3BABAN8QAQDpEAAA7hAAAPEQAQD3EAAA+hADAAERAAAJEQAACxEAAA0RAAASEQAAFBEDABkRAAAbEQAAHREAACARAAAiEQAAJBEAACgRAAArEQAALREAAC8RAAAzEQAANRECADsRAAA9EQAAShEBAFIRAABVEQIAWREAAGERAgBlEQIAaxEAAG0RAQBxEQAAdBEAAHwRhwAKEgQAEBIAABYSAQAZEgEAHBIAAB4SAAAgEgAAIhIAACQSAAApEgAALxIAADUSBgBHEgAAShIBAE0SAgBSEgEAVhIFAF8SAgBpEgAAbhIAAHoSAACIEgAAihIAAI4SAwCZEgMAoBIBALYSAAC5EgIAwBICAMQSAgDJEgAAzxIEAN4SAQDrEgEA7xIAAPESAwD8EgQABBMAAAYTAAAPEwIAExMCABgTAQAbEwAAHhMDACYTAQAxEwAANBMAADoTBgBQEwAAUxMBAFoTAgBeEwAAYRMAAGQTAAB5EwEAihMBAI0TAQCREwAAkxMAAJkTAwCfEwEApxMEAK8TBQC5EwEAwxMAAMYTAADPEwAA1BMDAOETAADvEwUA9hMAAPwTAAD+EwEABBQBAA4UAAASFAAA","H":"S3z0X0iN"},"function":{"N":"A@J`","E":"OzAAAAEAAIMDWAAAAAoAcQAbAJMAAACwAAEAngEBAKkBAADPAQAA3wEiAAYCAQBFBAAARwQAAFsEAABfBAAAZAQAAHAEAAB7BC0AqgQBAEcFAABKBQEAVQUAAF8FAABjBQMAbAUAAG8FAwB2BS0AkgYAAJUGAACYBgIAnAYCAKIGAADbBgAA7AYGAPUGAAD3BgAAEQcAABwHMADBBwAAyAcBANEHAADGCDMA/wgBAB8JAAA1CQEAuQswAPQLAAD9CwAAGAwAACoMAAB5DAAAfgwDAIMMNgAyDgMANw4BAFUPAABXDxgAcg8HAH4PAADBDwAAxQ8BANsPIQD+DxsALRAAAE0QAQBrECsAmxACAKEQAADWEDAAVxElAB8SKQBhEgEAeBIbAKASAACiEhMAtxIXAOsSAADvEgsAGBMCACITEwBcEwAAXxMAAGITCgB+Ew8AnxMFALcTAwDEEwsA2xMAAOUTBQADFAQA","H":"y0xH3KAE"},"type":{"N":"AJl","E":"OzAAAAEAAHcSnAACAAQACQAAAAsAZQByAAIAeQAAAH8ABQCIAAAAigABAI0AIgCyAOsAnwEJAKoBNADjAQEA5gEIAPMBAQD3AQIA+wEAAAACBQAHAnMCgQQAAIUEAgCKBAAAjAQAAJQEAACXBAIAmwQDAKAEAACiBAAApwQAAKkEAACrBLMAYAUQAHMFAgB3BQUAfwUFAI0FAQCZBQYApAV6ASEHBAAoBwAALQcBADEHAAAzBwMAPwcAAEEHAgBFBwQATAd7AMkH/ADICAAAyggBAM0IAgDVCAAA2AgBANsIBQDlCAAA5wgAAOoIAgDwCAEA+Qi/AroLAAC8CwMAwQsBAMULAADHCwAAzAsAANILAADWCwMA3AsAAN4LAADiCwAA5QsBAOkLQAArDFIAgAwCAIQMAQCHDAAAjgwBAJIMAACbDAIArwwAALoMmgJWDwAAYQ8BAGYPBABtDwEAcA8BAHMPAgB6D2MA5A8BAOcPAgDyDwEA9w8IAAQQBAALEAAAGhBSAG8QBAB3EAAAehABAH0QAQCAEAcAjBABAJEQAQCXEEMA3xAAAOEQBQDpEAIA7xAFAPgQBQACEQEABxFQAFkRAABdEQAAYhEBAGURAgBsEQAAdREBAHgRpgAgEgAAIhIAACUSAQAoEgAAKxIDADASCgA8EgEARBICAEgSMQB7EgIAhBIBAIgSAACKEgAAjhIVAKYSAwCrEgcAtRIDALoSBQDBEgAAxBICAMoSAADMEgEAzxIfAPESBAD4Ei0AKBMEADATAAA2EysAZRMFAG0TGgCJEwIAjhMQAKETFwC7EwoAyRMFANATFADmEwMA6xMXAAYUHQA=","H":"yDMiZzo5"},"alias":{"N":"`","E":"OzAAAAEAACMUAQAAACMU","H":"p2IVDFMs"},"generic_inverted_index":{"N":"b","E":"OjAAAAAAAAA=","H":"U8V8JuSa"}}') \ No newline at end of file +rr_('{"normalizedName":{"I":"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","N":"ADBd","E":"OjAAAAAAAAA=","H":"3jpX1T07"},"crateNames":{"N":"j","E":"OjAAAAAAAAA=","H":"JFDJy0NX"},"name":{"N":"ADBd","E":"OjAAAAAAAAA=","H":"7bFmUNOn"},"path":{"N":"BAo","E":"OzAAAAEAAAQSugACAAQACQAAAAsAZQByAAEAeQAAAH8ABACKAAEAjQAFAJQAGwCyAOsAoAEIAKoBJADQAQ4A4wEAAOcBBQDzAQEA9wECAPsBAAAAAgUACAI8AkYEAABIBBIAXAQCAGAEAwBlBAoAcQQJAIUEAACXBAIAmwQDAKAEAACiBAAApwQAAKkEAACsBJoASAUBAEwFCABWBQgAYAUCAGYFCABzBQIAdwUEAH8FBQCNBQEAmQUCAJ0FAgCkBe0AkwYEAJkGAACbBgAAngY8ANwGDwDuBgMA8wYDAPgGGAASBwwAJAcBACgHAAAtBwEAMQcAADMHAwA/BwAAQQcCAEYHAABJBwAATAd0AMIHBQDKBwYA0gfzAMgIAADKCAEAzggBANUIAADbCAUA5QgAAOcIAADqCAIA8AgBAPkIBQABCR0AIAkUADcJgQK6CwAAwQsBAMcLAADMCwAA0gsAANYLAwDiCwAA6gsJAPULBwD+CxkAGQwQACsMTQB6DAMAggwAAIQMAQCcDAEAugx3ATQOAgA5DhsBVg8AAGEPAQBnDwMAbQ8BAHAPAQBzDwEAeg8DAH8PQQDCDwIAxw8WAOQPAQDnDwIA8g8BAPcPBAD9DwIABBAEAAsQAAAaEBIALhAeAE4QHgBvEAMAdxAAAHoQAQB9EAEAgBAHAIwQAQCREAEAlxADAJwQAACeEAIAohA4AOEQBQDqEAEA7xAFAPgQBQACEQEABxFQAFkRAABdEQAAYhEBAGURAQBsEQAAdREBAHgRAwB9EaEAIBIAACISAAAlEgEAKBIAACsSAwAwEgoAPBIBAEQSAgBIEhgAYhIXAHsSAgCEEgEAjhIRAKESAgCmEgMAqxIHALUSAwC6EgUAxBICAMoSAADMEgEAzxIbAOwSAgDxEgQA+BIfABoTCwAoEwQAMBMAADYTJQBdEwQAZRMFAG0TGgCJEwIAjhMQAKETFwC7EwoAyRMFANATFADmEwMA6xMXAAYUHQA=","H":"tf4W8H1m"},"entry":{"N":"ACAl","E":"OjAAAAEAAAAAAAcBEAAAAAAAAQAHAAgACgBxAHQAdQB2AHoAewCEAIgAiQCMAJMAsACxAJ4BnwGpAd8B4AHhAeIB5AHlAeYB7QHuAe8B8gH1AfoB/AH/AQYCRQRbBF8EZARwBHsEfAR9BH4EgQSCBIYEhwSIBIkEigSLBIwEjQSOBI8ElASaBJ8EoQSjBKYEqASqBEcFSgVLBVUFXwVjBWQFZQVvBXAFcQVyBXwFfQWFBYYFhwWIBYsFjAWPBZAFkwWUBZUFlgWXBZwFoAWhBZIGmAaaBpwGnQbbBuwG7QbyBvcGEQcfByAHIQciByMHKQcsBzcHOAc5BzoHPgdFB0cHSAfIB8kH0QfHCM0I0AjRCNQI2AjZCOMI5AjtCPcI+Aj/CAAJHwk1CbkLvAu9C74LvwvAC8ULyAvLC84L1QvcC94L5QvmC+gL6Qv0C/0LKgx5DH4MgAyBDIMMhwyJDI4MjwySDJUMlgyYDJkMmgybDJ8MowypDKwMrQyvDLAMMg4zDjcOOA5ZD1wPZg91D3kPwQ/FD8YP3g/fD+sP7g/8DwAQAxAKEAwQDxAQEBUQFhAZEC0QTRBzEHwQihCOEI8QkxCbEJ0Q3BDdEN8Q4BDpEO4Q9xBhEWcRaxFtEW4RcRF0EXwRJBIpEi8SOxJHEmESehKIEooSuRLAEsESwhLJEusSGBMZEyYTJxMxEzQTXBNkE58ToBPGE88TBBQFFA==","H":"JlQ7lQg1"},"desc":{"N":"FNi","E":"OzAAAAEAADoNgQEAAAEABwABAAoAVgBvAAAAcQAFAHkAAwCEAAEAhwACAIwAGwCwAOsAngEBAKkBAgDMAQIA0AEBANUBAQDYAQAA3QEJAO0BAgDyAQAA9QEAAPgBAgD8AQAA/wEAAAICAQAGAgEADAIGACwCAAA6AgIAPwIBAEYCAwBRAgQAWgIAAGECAQBkAgAAaQIAAHACAQBzAgAAdwIAAHoCAACAAgAAjQIAAJICCgC1AgMAugIAAL8CAADSAgAA2AIAAN4CAADkAgEA6wIAAPECAAD5AgAAAAMBAAgDAAAPAwAAEwMAABgDAwAdAwYAMAMAAD8DFAA7BAQAQQQAAEUEAABHBAAASQQAAEsEAABNBAwAWwQAAF8EAABhBAAAZAQAAG0EAABwBAAAdgQBAHkEBQCBBAEAhQQKAJQEAACaBAAAnwQAAKEEAACjBAUAqgQBAK0EAgCxBAMAvASGAEcFBABUBQEAVwUCAF8FAABhBQUAbAUAAG8FAwB3BQMAfAUBAIMFBQCLBQEAjwUBAJMFBACcBQEAnwUCAKgF5gCSBgEAlQYBAJgGAACaBgAAnAYBAKAGAACkBgAApwYIALEGAQC1BgsAxAYAAMsGAQDOBgEA1AYCANgGAwDsBgIA8AYAAPIGAQD1BgsABgcBABEHAAAVBwIAGQcCAB8HBAApBwAALAcCADEHAAAzBwcAPgcAAEUHAABHBwEATwcAAFIHGQB0BzAApgcBALgHAgC8BwIAwwcAAMUHAADIBwEA0QcAANMHAADXB+YAxwgEAM0IAADQCAEA1AgAANgIAQDfCAEA4wgBAO0IAAD3CAEA/AgEAA8JAQAZCQQAHwkAACMJAgAnCQIAMgkBADUJAgBDCboA/wkAAAIKTQBTCmABuAsBALwLBADFCwEAyAsAAMsLAADOCwAA0AsBANULAADXCwEA3AsAAN4LAADlCwEA6AsBAOsLCQD2CwIA+gsDAAEMAQAJDAAAFAwDABwMAQAfDAUAKAwCAC4MAAAwDAUANww+AHkMAAB+DAAAgAwBAIMMAACHDAAAiQwAAI4MAQCSDAAAlQwBAJgMBQCfDAAAowwAAKkMAACsDAQAuwwFAMMMbQEyDgEANw73AEAPAABGDwIASg8CAFMPAQBWDwMAXA8AAGEPAQBmDwAAaQ8BAG0PBABzDwIAdw8CAHsPAwCPDw8AoA8BAKMPAAClDwEAqQ8TAMEPAADFDwEA2w8BAN4PAQDrDwAA7g8AAPEPAAD6DwMAABAAAAMQAAAFEAMAChAAAAwQAAAPEAEAFRABABkQBQAhEAEAJhACACoQAAAsEAEANBABADsQAQA/EAQATBACAFEQAQBWEAEAYRADAHMQAAB6EAIAgxADAIoQAACMEAMAkRACAJgQAQCbEAAAnRAAAKEQAACjEAIAqxACAK8QAgCzEAYAwBAAAMwQAQDQEAkA3BABAN8QAQDpEAAA7hAAAPEQAQD3EAAA+hADAAERAAAJEQAACxEAAA0RAAASEQAAFBEDABkRAAAbEQAAHREAACARAAAiEQAAJBEAACgRAAArEQAALREAAC8RAAAzEQAANRECADsRAAA9EQAAShEBAFIRAABVEQIAWREAAGERAgBlEQIAaxEAAG0RAQBxEQAAdBEAAHwRhwAKEgQAEBIAABYSAQAZEgEAHBIAAB4SAAAgEgAAIhIAACQSAAApEgAALxIAADUSBgBHEgAAShIBAE0SAgBSEgEAVhIFAF8SAgBpEgAAbhIAAHoSAACIEgAAihIAAI4SAwCZEgMAoBIBALYSAAC5EgIAwBICAMQSAgDJEgAAzxIEAN4SAQDrEgEA7xIAAPESAwD8EgQABBMAAAYTAAAPEwIAExMCABgTAQAbEwAAHhMDACYTAQAxEwAANBMAADoTBgBQEwAAUxMBAFoTAgBeEwAAYRMAAGQTAAB5EwEAihMBAI0TAQCREwAAkxMAAJkTAwCfEwEApxMEAK8TBQC5EwEAwxMAAMYTAADPEwAA1BMDAOETAADvEwUA9hMAAPwTAAD+EwEABBQBAA4UAAASFAAA","H":"cbn9EAxq"},"function":{"N":"A@J`","E":"OzAAAAEAAIMDWAAAAAoAcQAbAJMAAACwAAEAngEBAKkBAADPAQAA3wEiAAYCAQBFBAAARwQAAFsEAABfBAAAZAQAAHAEAAB7BC0AqgQBAEcFAABKBQEAVQUAAF8FAABjBQMAbAUAAG8FAwB2BS0AkgYAAJUGAACYBgIAnAYCAKIGAADbBgAA7AYGAPUGAAD3BgAAEQcAABwHMADBBwAAyAcBANEHAADGCDMA/wgBAB8JAAA1CQEAuQswAPQLAAD9CwAAGAwAACoMAAB5DAAAfgwDAIMMNgAyDgMANw4BAFUPAABXDxgAcg8HAH4PAADBDwAAxQ8BANsPIQD+DxsALRAAAE0QAQBrECsAmxACAKEQAADWEDAAVxElAB8SKQBhEgEAeBIbAKASAACiEhMAtxIXAOsSAADvEgsAGBMCACITEwBcEwAAXxMAAGITCgB+Ew8AnxMFALcTAwDEEwsA2xMAAOUTBQADFAQA","H":"y0xH3KAE"},"type":{"N":"AJl","E":"OzAAAAEAAHcSnAACAAQACQAAAAsAZQByAAIAeQAAAH8ABQCIAAAAigABAI0AIgCyAOsAnwEJAKoBNADjAQEA5gEIAPMBAQD3AQIA+wEAAAACBQAHAnMCgQQAAIUEAgCKBAAAjAQAAJQEAACXBAIAmwQDAKAEAACiBAAApwQAAKkEAACrBLMAYAUQAHMFAgB3BQUAfwUFAI0FAQCZBQYApAV6ASEHBAAoBwAALQcBADEHAAAzBwMAPwcAAEEHAgBFBwQATAd7AMkH/ADICAAAyggBAM0IAgDVCAAA2AgBANsIBQDlCAAA5wgAAOoIAgDwCAEA+Qi/AroLAAC8CwMAwQsBAMULAADHCwAAzAsAANILAADWCwMA3AsAAN4LAADiCwAA5QsBAOkLQAArDFIAgAwCAIQMAQCHDAAAjgwBAJIMAACbDAIArwwAALoMmgJWDwAAYQ8BAGYPBABtDwEAcA8BAHMPAgB6D2MA5A8BAOcPAgDyDwEA9w8IAAQQBAALEAAAGhBSAG8QBAB3EAAAehABAH0QAQCAEAcAjBABAJEQAQCXEEMA3xAAAOEQBQDpEAIA7xAFAPgQBQACEQEABxFQAFkRAABdEQAAYhEBAGURAgBsEQAAdREBAHgRpgAgEgAAIhIAACUSAQAoEgAAKxIDADASCgA8EgEARBICAEgSMQB7EgIAhBIBAIgSAACKEgAAjhIVAKYSAwCrEgcAtRIDALoSBQDBEgAAxBICAMoSAADMEgEAzxIfAPESBAD4Ei0AKBMEADATAAA2EysAZRMFAG0TGgCJEwIAjhMQAKETFwC7EwoAyRMFANATFADmEwMA6xMXAAYUHQA=","H":"yDMiZzo5"},"alias":{"N":"`","E":"OzAAAAEAACMUAQAAACMU","H":"p2IVDFMs"},"generic_inverted_index":{"N":"b","E":"OjAAAAAAAAA=","H":"U8V8JuSa"}}') \ No newline at end of file diff --git a/pr/547/docs/settings.html b/pr/547/docs/settings.html index abf467830..fc24471ee 100644 --- a/pr/547/docs/settings.html +++ b/pr/547/docs/settings.html @@ -1 +1 @@ -Settings

    All

    Rustdoc settings

    Back
    \ No newline at end of file +Settings

    All

    Rustdoc settings

    Back
    \ No newline at end of file diff --git a/pr/547/docs/src/noq/event_stream.rs.html b/pr/547/docs/src/noq/event_stream.rs.html index 4c3f58fd8..72fbb6f12 100644 --- a/pr/547/docs/src/noq/event_stream.rs.html +++ b/pr/547/docs/src/noq/event_stream.rs.html @@ -12,110 +12,112 @@ 12use tokio_stream::wrappers::{BroadcastStream, WatchStream, errors::BroadcastStreamRecvError}; 13use tokio_stream::Stream; 14 -15/// The receiver lagged too far behind. Attempting to receive again will -16/// return the oldest message still retained by the channel. -17#[derive(Debug, Clone, PartialEq, Eq, Error)] -18#[error("channel lagged by {0}")] -19pub struct Lagged(pub u64); -20 -21/// A stream of [`PathEvent`]s for all paths in a connection. -22pub struct PathEvents { -23 inner: BroadcastStream<PathEvent>, -24} -25 -26impl PathEvents { -27 pub(crate) fn new(rx: broadcast::Receiver<PathEvent>) -> Self { -28 Self { -29 inner: BroadcastStream::new(rx), -30 } -31 } -32} -33 -34impl Stream for PathEvents { -35 type Item = Result<PathEvent, Lagged>; -36 -37 fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Option<Self::Item>> { -38 Pin::new(&mut self.inner) -39 .poll_next(cx) -40 .map(|opt| opt.map(|res| res.map_err(|BroadcastStreamRecvError::Lagged(n)| Lagged(n)))) -41 } -42} -43 -44impl fmt::Debug for PathEvents { -45 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { -46 f.debug_struct("PathEvents").finish() -47 } -48} -49 -50/// A stream of NAT traversal updates for a connection. -51pub struct NatTraversalUpdates { -52 inner: BroadcastStream<n0_nat_traversal::Event>, -53} -54 -55impl NatTraversalUpdates { -56 pub(crate) fn new(rx: broadcast::Receiver<n0_nat_traversal::Event>) -> Self { -57 Self { -58 inner: BroadcastStream::new(rx), -59 } -60 } -61} -62 -63impl Stream for NatTraversalUpdates { -64 type Item = Result<n0_nat_traversal::Event, Lagged>; -65 -66 fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Option<Self::Item>> { -67 Pin::new(&mut self.inner) -68 .poll_next(cx) -69 .map(|opt| opt.map(|res| res.map_err(|BroadcastStreamRecvError::Lagged(n)| Lagged(n)))) -70 } -71} -72 -73impl fmt::Debug for NatTraversalUpdates { -74 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { -75 f.debug_struct("NatTraversalUpdates").finish() -76 } -77} -78 -79/// Watches the external address reported by the peer for this connection. -80/// -81/// Implements [`Stream`] yielding `SocketAddr` on each change. -82/// Use [`get`](Self::get) to read the current value without waiting. -83pub struct ObservedExternalAddr { -84 rx: watch::Receiver<Option<SocketAddr>>, -85 stream: WatchStream<Option<SocketAddr>>, -86} -87 -88impl ObservedExternalAddr { -89 pub(crate) fn new(rx: watch::Receiver<Option<SocketAddr>>) -> Self { -90 let stream = WatchStream::new(rx.clone()); -91 Self { rx, stream } -92 } -93 -94 /// Returns the most recently observed external address, or `None` if the -95 /// peer has not yet reported one. Retains the last value even after the -96 /// stream is closed. -97 pub fn get(&self) -> Option<SocketAddr> { -98 *self.rx.borrow() -99 } -100} -101 -102impl Stream for ObservedExternalAddr { -103 type Item = SocketAddr; -104 -105 fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Option<Self::Item>> { -106 loop { -107 match Pin::new(&mut self.stream).poll_next(cx) { -108 Poll::Ready(Some(Some(addr))) => return Poll::Ready(Some(addr)), -109 Poll::Ready(Some(None)) => continue, -110 Poll::Ready(None) => return Poll::Ready(None), -111 Poll::Pending => return Poll::Pending, -112 } -113 } -114 } -115} -116 -117impl fmt::Debug for ObservedExternalAddr { -118 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { -119 f.debug_struct("ObservedExternalAddr").finish() -120 } -121}
    \ No newline at end of file +15/// The receiver lagged too far behind. +16/// +17/// Attempting to receive again will return the oldest message still retained +18/// by the channel. +19#[derive(Debug, Clone, PartialEq, Eq, Error)] +20#[error("channel lagged by {0}")] +21pub struct Lagged(pub u64); +22 +23/// A stream of [`PathEvent`]s for all paths in a connection. +24pub struct PathEvents { +25 inner: BroadcastStream<PathEvent>, +26} +27 +28impl PathEvents { +29 pub(crate) fn new(rx: broadcast::Receiver<PathEvent>) -> Self { +30 Self { +31 inner: BroadcastStream::new(rx), +32 } +33 } +34} +35 +36impl Stream for PathEvents { +37 type Item = Result<PathEvent, Lagged>; +38 +39 fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Option<Self::Item>> { +40 Pin::new(&mut self.inner) +41 .poll_next(cx) +42 .map(|opt| opt.map(|res| res.map_err(|BroadcastStreamRecvError::Lagged(n)| Lagged(n)))) +43 } +44} +45 +46impl fmt::Debug for PathEvents { +47 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { +48 f.debug_struct("PathEvents").finish() +49 } +50} +51 +52/// A stream of NAT traversal updates for a connection. +53pub struct NatTraversalUpdates { +54 inner: BroadcastStream<n0_nat_traversal::Event>, +55} +56 +57impl NatTraversalUpdates { +58 pub(crate) fn new(rx: broadcast::Receiver<n0_nat_traversal::Event>) -> Self { +59 Self { +60 inner: BroadcastStream::new(rx), +61 } +62 } +63} +64 +65impl Stream for NatTraversalUpdates { +66 type Item = Result<n0_nat_traversal::Event, Lagged>; +67 +68 fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Option<Self::Item>> { +69 Pin::new(&mut self.inner) +70 .poll_next(cx) +71 .map(|opt| opt.map(|res| res.map_err(|BroadcastStreamRecvError::Lagged(n)| Lagged(n)))) +72 } +73} +74 +75impl fmt::Debug for NatTraversalUpdates { +76 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { +77 f.debug_struct("NatTraversalUpdates").finish() +78 } +79} +80 +81/// Watches the external address reported by the peer for this connection. +82/// +83/// Implements [`Stream`] yielding `SocketAddr` on each change. +84/// Use [`get`](Self::get) to read the current value without waiting. +85pub struct ObservedExternalAddr { +86 rx: watch::Receiver<Option<SocketAddr>>, +87 stream: WatchStream<Option<SocketAddr>>, +88} +89 +90impl ObservedExternalAddr { +91 pub(crate) fn new(rx: watch::Receiver<Option<SocketAddr>>) -> Self { +92 let stream = WatchStream::new(rx.clone()); +93 Self { rx, stream } +94 } +95 +96 /// Returns the most recently observed external address, or `None` if the +97 /// peer has not yet reported one. Retains the last value even after the +98 /// stream is closed. +99 pub fn get(&self) -> Option<SocketAddr> { +100 *self.rx.borrow() +101 } +102} +103 +104impl Stream for ObservedExternalAddr { +105 type Item = SocketAddr; +106 +107 fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Option<Self::Item>> { +108 loop { +109 match Pin::new(&mut self.stream).poll_next(cx) { +110 Poll::Ready(Some(Some(addr))) => return Poll::Ready(Some(addr)), +111 Poll::Ready(Some(None)) => continue, +112 Poll::Ready(None) => return Poll::Ready(None), +113 Poll::Pending => return Poll::Pending, +114 } +115 } +116 } +117} +118 +119impl fmt::Debug for ObservedExternalAddr { +120 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { +121 f.debug_struct("ObservedExternalAddr").finish() +122 } +123}
    \ No newline at end of file