\ No newline at end of file
diff --git a/pr/545/docs/noq/enum.ConnectionError.html b/pr/545/docs/noq/enum.ConnectionError.html
index 31bf5ff81..56a4c44c7 100644
--- a/pr/545/docs/noq/enum.ConnectionError.html
+++ b/pr/545/docs/noq/enum.ConnectionError.html
@@ -1,4 +1,4 @@
-ConnectionError in noq - Rust
QUIC is a modern transport protocol addressing
shortcomings of TCP, such as head-of-line blocking, poor security, slow handshakes, and
inefficient congestion control. This crate provides a portable userspace implementation. It
@@ -29,6 +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.
Automatically select an appropriate runtime from those enabled at compile time
\ No newline at end of file
diff --git a/pr/545/docs/noq/sidebar-items.js b/pr/545/docs/noq/sidebar-items.js
index 9f506426c..831f580ce 100644
--- a/pr/545/docs/noq/sidebar-items.js
+++ b/pr/545/docs/noq/sidebar-items.js
@@ -1 +1 @@
-window.SIDEBAR_ITEMS = {"enum":["ConfigError","ConnectError","ConnectionError","Dir","EcnCodepoint","FrameType","ReadError","ReadExactError","ReadToEndError","ResetError","SendDatagramError","Side","StoppedError","WriteError"],"fn":["default_runtime"],"mod":["congestion","crypto"],"struct":["Accept","AcceptBi","AcceptUni","AckFrequencyConfig","AddressDiscovery","ApplicationClose","BloomTokenLog","Chunk","ClientConfig","ClosedStream","Connecting","Connection","ConnectionClose","ConnectionId","ConnectionStats","Endpoint","EndpointConfig","EndpointStats","FrameStats","IdleTimeout","Incoming","IncomingFuture","InvalidCid","MtuDiscoveryConfig","NoneTokenLog","NoneTokenStore","OnClosed","OpenBi","OpenPath","OpenUni","Path","PathId","PathStats","QlogConfig","QlogFileFactory","ReadDatagram","RecvStream","RetryError","SendDatagram","SendStream","ServerConfig","SmolRuntime","StdSystemTime","Stopped","StreamId","TokenMemoryCache","TokenReuseError","TokioRuntime","Transmit","TransportConfig","TransportErrorCode","UdpStats","UnorderedRecvStream","ValidationTokenConfig","VarInt","VarIntBoundsExceeded","WeakConnectionHandle","WeakPathHandle","Written","ZeroRttAccepted"],"trait":["AsyncTimer","AsyncUdpSocket","ConnectionIdGenerator","NetworkChangeHint","QlogFactory","Runtime","TimeSource","TokenLog","TokenStore","UdpSender"]};
\ No newline at end of file
+window.SIDEBAR_ITEMS = {"enum":["ConfigError","ConnectError","ConnectionError","Dir","EcnCodepoint","FrameType","ReadError","ReadExactError","ReadToEndError","ResetError","SendDatagramError","Side","StoppedError","WriteError"],"fn":["default_runtime"],"mod":["congestion","crypto"],"struct":["Accept","AcceptBi","AcceptUni","AckFrequencyConfig","AddressDiscovery","ApplicationClose","BloomTokenLog","Chunk","ClientConfig","ClosedStream","Connecting","Connection","ConnectionClose","ConnectionId","ConnectionStats","Endpoint","EndpointConfig","EndpointStats","FrameStats","IdleTimeout","Incoming","IncomingFuture","InvalidCid","Lagged","MtuDiscoveryConfig","NatTraversalUpdates","NoneTokenLog","NoneTokenStore","ObservedExternalAddr","OnClosed","OpenBi","OpenPath","OpenUni","Path","PathEvents","PathId","PathStats","QlogConfig","QlogFileFactory","ReadDatagram","RecvStream","RetryError","SendDatagram","SendStream","ServerConfig","SmolRuntime","StdSystemTime","Stopped","StreamId","TokenMemoryCache","TokenReuseError","TokioRuntime","Transmit","TransportConfig","TransportErrorCode","UdpStats","UnorderedRecvStream","ValidationTokenConfig","VarInt","VarIntBoundsExceeded","WeakConnectionHandle","WeakPathHandle","Written","ZeroRttAccepted"],"trait":["AsyncTimer","AsyncUdpSocket","ConnectionIdGenerator","NetworkChangeHint","QlogFactory","Runtime","TimeSource","TokenLog","TokenStore","UdpSender"]};
\ No newline at end of file
diff --git a/pr/545/docs/noq/struct.AcceptBi.html b/pr/545/docs/noq/struct.AcceptBi.html
index 792b03cea..180bbe0f8 100644
--- a/pr/545/docs/noq/struct.AcceptBi.html
+++ b/pr/545/docs/noq/struct.AcceptBi.html
@@ -1,6 +1,6 @@
-AcceptBi in noq - Rust
This will always return the external address most recently reported by the remote over this
path. If the extension is not negotiated, this stream will never return.
Attempt to pull out the next value of this stream, registering the
diff --git a/pr/545/docs/noq/struct.ClosedStream.html b/pr/545/docs/noq/struct.ClosedStream.html
index 8eb864ca2..0453153c1 100644
--- a/pr/545/docs/noq/struct.ClosedStream.html
+++ b/pr/545/docs/noq/struct.ClosedStream.html
@@ -1,5 +1,5 @@
ClosedStream in noq - Rust
Convert into a 0-RTT or 0.5-RTT connection at the cost of weakened security
Returns Ok immediately if the local endpoint is able to attempt sending 0/0.5-RTT data.
If so, the returned Connection can be used to send application data without waiting for
the rest of the handshake to complete, at the cost of weakened cryptographic security
@@ -45,9 +45,9 @@ the endpoint is bound to a wildcard address like 0.0.0.0 or :
information. See noq_udp::RecvMeta::dst_ip for a list of
supported platforms when using noq_udp for I/O, which is the default.
Will panic if called after poll has returned Ready.
If all references to a connection (including every clone of the Connection handle, streams of
incoming streams, and the various stream types) have been dropped, then the connection will be
automatically closed with an error_code of 0 and an empty reason. You can also close the
@@ -8,29 +8,29 @@ receiving CONNECTION_CLOSE the peer may drop any stream data not yet de
application. Connection::close() describes in more detail how to gracefully close a
connection without losing application data.
May be cloned to obtain another handle to the same connection.
Streams are cheap and instantaneous to open unless blocked by flow control. As a
consequence, the peer won’t be notified that a stream has been opened until the stream is
actually used.
Streams are cheap and instantaneous to open unless blocked by flow control. As a
consequence, the peer won’t be notified that a stream has been opened until the stream is
actually used. Calling open_bi() then waiting on the RecvStream without writing
anything to SendStream will never succeed.
Important Note: The Connection that calls open_bi() must write to its SendStream
before the other Connection is able to accept_bi(). Calling open_bi() then
waiting on the RecvStream without writing anything to SendStream will never succeed.
A stream of PathEvents for all paths in this connection.
+
The stream will yield a PathEvent whenever there is a change in the state of any path in this connection.
+The events need to be processed immediately, since there isn’t an unbounded buffer for them.
+
If processing of events lags behind too much, you will get an error of type crate::Lagged indicating
+how many events were lost. The stream continues after a lag, delivering the oldest retained message next.
A stream of NAT traversal updates for this connection.
+
The events need to be processed immediately, since there isn’t an unbounded buffer for them.
+
If processing of events lags behind too much, you will get an error of type crate::Lagged indicating
+how many events were lost. The stream continues after a lag, delivering the oldest retained message next.
Calling Self::closed keeps the connection alive until it is either closed locally via Connection::close
or closed by the remote peer. This function instead does not keep the connection itself alive,
so if all other clones of the connection are dropped, the connection will be closed implicitly even
if there are futures returned from this function still being awaited.
Pending operations will fail immediately with ConnectionError::LocallyClosed. No
more data is sent to the peer and the peer may drop buffered data upon receiving
the CONNECTION_CLOSE frame.
@@ -82,7 +89,7 @@ endpoint. Once the local side sends a CONNECTION_CLOSE frame in response to call
close() the remote endpoint may drop any data it received but is as yet
undelivered to the application, including data that was acknowledged as received to
the local endpoint.
-
As a server, who must be authenticated by clients,
this happens when the handshake completes
upon receiving a TLS Finished message from the client.
@@ -90,56 +97,56 @@ In return, the server send a HANDSHAKE_DONE frame.
As a client, this happens when receiving a HANDSHAKE_DONE frame.
At this point, the server has either accepted our authentication,
or, if client authentication is not required, accepted our lack of authentication.
Transmit data as an unreliable, unordered application datagram
Application datagrams are a low-level primitive. They may be lost or delivered out of order,
and data must both fit inside a single QUIC packet and be smaller than the maximum
dictated by the peer.
Previously queued datagrams which are still unsent may be discarded to make space for this
datagram, in order of oldest to newest.
Transmit data as an unreliable, unordered application datagram
Unlike send_datagram(), this method will wait for buffer space during congestion
conditions, which effectively prioritizes old datagrams over new datagrams.
Compute the maximum size of datagrams that may be passed to send_datagram().
Returns None if datagrams are unsupported by the peer or disabled locally.
This may change over the lifetime of a connection according to variation in the path MTU
estimate. The peer can also enforce an arbitrarily small fixed limit, but if the peer’s
limit is large this is guaranteed to be a little over a kilobyte at minimum.
Not necessarily the maximum size of received datagrams.
The local IP address which was used when the peer established
the connection
This can be different from the address the endpoint is bound to, in case
the endpoint is bound to a wildcard address like 0.0.0.0 or ::.
This will return None for clients, or when the platform does not expose this
information. See noq_udp::RecvMeta::dst_ip for a list of
supported platforms when using noq_udp for I/O, which is the default.
Guaranteed to return Some on fully established connections or after
Connecting::handshake_data() succeeds. See that method’s documentations for details on
the returned value.
The dynamic type returned is determined by the configured
Session. For the default rustls session, the return value can
be downcast to a Vec<[rustls::pki_types::CertificateDer]>
pub fn export_keying_material(
&self,
output: &mut [u8],
label: &[u8],
@@ -150,17 +157,17 @@ arguments and output buffers of equal length, they will get the
same sequence of bytes in output. These bytes are cryptographically
strong and pseudorandom, and are suitable for use as keying material.
Registers one address at which this endpoint might be reachable
@@ -168,7 +175,7 @@ strong and pseudorandom, and are suitable for use as keying material.
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
when Self::initiate_nat_traversal_round is called.
-
Removes one or more addresses from the set of addresses at which this endpoint is reachable
@@ -177,18 +184,18 @@ clients in REMOVE_ADDRESS frames. This allows clients to stop using
server address candidates that are no longer valid for NAT traversal.
For clients, removed addresses will no longer be advertised in REACH_OUT frames.
Addresses not present in the set will be silently ignored.
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.
Returns the server addresses that are now being probed.
\ No newline at end of file
diff --git a/pr/545/docs/noq/struct.NatTraversalUpdates.html b/pr/545/docs/noq/struct.NatTraversalUpdates.html
new file mode 100644
index 000000000..d28398c9b
--- /dev/null
+++ b/pr/545/docs/noq/struct.NatTraversalUpdates.html
@@ -0,0 +1,174 @@
+NatTraversalUpdates in noq - Rust
Attempt to pull out the next value of this stream, registering the
+current task for wakeup if the value is not yet available, and returning
+None if the stream is exhausted. Read more
Map this stream’s items to a different type for as long as determined by
+the provided closure. A stream of the target type will be returned,
+which will yield elements until the closure returns None. Read more
\ No newline at end of file
diff --git a/pr/545/docs/noq/struct.ObservedExternalAddr.html b/pr/545/docs/noq/struct.ObservedExternalAddr.html
new file mode 100644
index 000000000..7e5f62e37
--- /dev/null
+++ b/pr/545/docs/noq/struct.ObservedExternalAddr.html
@@ -0,0 +1,175 @@
+ObservedExternalAddr in noq - Rust
Attempt to pull out the next value of this stream, registering the
+current task for wakeup if the value is not yet available, and returning
+None if the stream is exhausted. Read more
Map this stream’s items to a different type for as long as determined by
+the provided closure. A stream of the target type will be returned,
+which will yield elements until the closure returns None. Read more
\ No newline at end of file
diff --git a/pr/545/docs/noq/struct.OnClosed.html b/pr/545/docs/noq/struct.OnClosed.html
index 10305d018..530c1e14e 100644
--- a/pr/545/docs/noq/struct.OnClosed.html
+++ b/pr/545/docs/noq/struct.OnClosed.html
@@ -1,6 +1,6 @@
-OnClosed in noq - Rust
Holding a WeakPathHandle does not keep a connection alive, but ensures that the
path’s stats are not dropped until the underlying connection is dropped, even if the
path is abandoned.
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
returned.
Attempt to pull out the next value of this stream, registering the
+current task for wakeup if the value is not yet available, and returning
+None if the stream is exhausted. Read more
Map this stream’s items to a different type for as long as determined by
+the provided closure. A stream of the target type will be returned,
+which will yield elements until the closure returns None. Read more
\ No newline at end of file
diff --git a/pr/545/docs/noq/struct.ReadDatagram.html b/pr/545/docs/noq/struct.ReadDatagram.html
index 6bb134ade..cac5d37c3 100644
--- a/pr/545/docs/noq/struct.ReadDatagram.html
+++ b/pr/545/docs/noq/struct.ReadDatagram.html
@@ -1,6 +1,6 @@
-ReadDatagram in noq - Rust
where
diff --git a/pr/545/docs/noq/struct.SendStream.html b/pr/545/docs/noq/struct.SendStream.html
index 540865dff..b6a413534 100644
--- a/pr/545/docs/noq/struct.SendStream.html
+++ b/pr/545/docs/noq/struct.SendStream.html
@@ -8,7 +8,7 @@ ready will always result in no data being written to the stream. This is true of
succeed immediately when any progress is made, and is not true of methods which might need to
perform multiple writes internally before succeeding. Each write method documents whether it is
cancel-safe.
-
Write a buffer into this stream, returning how many bytes were written
Unless this method errors, it waits until some amount of buf can be written into this
stream, and then writes as much as it can without waiting again. Due to congestion and flow
control, this may be shorter than buf.len(). On success this yields the length of the
@@ -58,7 +58,7 @@ or an error occurs. This method mutates bufs by mutating all chunks
Notify the peer that no more data will ever be written to this stream
It is an error to write to a SendStream after finish()ing it. reset()
may still be called after finish to abandon transmission of any stream data that might
still be buffered.
@@ -66,21 +66,21 @@ still be buffered.
May fail if finish() or reset() was previously
called. This error is harmless and serves only to indicate that the caller may have
incorrect assumptions about the stream’s state.
No new data can be written after calling this method. Locally buffered data is dropped, and
previously transmitted data will no longer be retransmitted if lost. If an attempt has
already been made to finish the stream, the peer may still receive all written data.
May fail if finish() or reset() was previously
called. This error is harmless and serves only to indicate that the caller may have
incorrect assumptions about the stream’s state.
Every send stream has an initial priority of 0. Locally buffered data from streams with
higher priority will be transmitted before data from streams with lower priority. Changing
the priority of a stream with pending data may only take effect after that data has been
transmitted. Using many different priority levels per connection may have a negative
impact on performance.
Completes when the peer stops the stream or reads the stream to completion
Yields Some with the stop error code if the peer stops the stream. Yields None if the
local side finish()es the stream and then the peer acknowledges receipt
of all stream data (although not necessarily the processing of it), after which the peer
@@ -88,8 +88,8 @@ closing the stream is no longer meaningful.
For a variety of reasons, the peer may not send acknowledgements immediately upon receiving
data. As such, relying on stopped to know when the peer has read a stream to completion
may introduce more latency than using an application-level response of some sort.
pub fn poll_write(
self: Pin<&mut Self>,
cx: &mut Context<'_>,
buf: &[u8],
@@ -98,22 +98,22 @@ may introduce more latency than using an application-level response of some sort
If the stream is not ready for writing, the method returns Poll::Pending and arranges
for the current task (via cx.waker().wake_by_ref()) to receive a notification when the
stream becomes writable or is closed.
Writes a buffer into this writer, returning how many bytes were
diff --git a/pr/545/docs/noq/struct.Stopped.html b/pr/545/docs/noq/struct.Stopped.html
index a90b38c9f..4bb4f74f6 100644
--- a/pr/545/docs/noq/struct.Stopped.html
+++ b/pr/545/docs/noq/struct.Stopped.html
@@ -1,6 +1,6 @@
-Stopped in noq - Rust