Struct fabruic::Endpoint [−][src]
pub struct Endpoint { /* fields omitted */ }
Expand description
Represents a socket using the QUIC protocol to communicate with peers.
Stream
Receives incoming Connection
s through [Stream
].
Implementations
Simplified version of creating a client. See Builder
for more
sophisticated configuration options. Must be called from inside a Tokio
Runtime
.
Notes
This configuration will not be able to receive incoming
Connection
s.
Errors
std::io::Error
if the socket couldn’t be bound to the given
address
.
Panics
If not called from inside a Tokio Runtime
.
Examples
use fabruic::Endpoint;
let endpoint = Endpoint::new_client()?;
Simplified version of creating a server. See Builder
for more
sophisticated configuration options. Must be called from inside a Tokio
Runtime
.
Errors
std::io::Error
if the socket couldn’t be bound to the given
address
.
Panics
- if the given
KeyPair
is invalid - can’t happen if properly validated throughKeyPair::from_parts
- if not called from inside a Tokio
Runtime
Examples
use fabruic::{Endpoint, KeyPair};
let endpoint = Endpoint::new_server(0, KeyPair::new_self_signed("self-signed"))?;
Establishes a new Connection
to a server. The
servers Certificate
will be validated aggainst the root certificate
store and the domain in the URL.
Attempts to resolve the IP from the given URL. Uses
trust-dns
by default if the crate feature trust-dns
is enabled.
Otherwise ToSocketAddrs
is used.
See Builder::set_trust_dns
or Builder::disable_trust_dns
for
more control.
Notes
The following settings are used when using
trust-dns
:
- all system configurations are ignored, see
Builder::set_hosts_file
- Cloudflare with DoH is used as the name server
- DNSSEC is enabled, see
Builder::set_dnssec
- IPv6 is preferred over IPv4 if the bound socket is IPv6
Errors
error::Connect::ParseUrl
if the URL couldn’t be parsederror::Connect::Domain
if the URL didn’t contain a domainerror::Connect::Port
if the URL didn’t contain a porterror::Connect::ParseDomain
if the domain couldn’t be parsederror::Connect::TrustDns
if the URL couldn’t be resolved to an IP address withtrust-dns
error::Connect::StdDns
if the URL couldn’t be resolved to an IP address withToSocketAddrs
error::Connect::NoIp
if no IP address was found for that domain
Examples
use fabruic::Endpoint;
let endpoint = Endpoint::new_client()?;
// not going to actually work because `localhost` can't have a valid certificate
let connecting = endpoint.connect("quic://localhost:443").await?;
pub async fn connect_pinned<U: AsRef<str>>(
&self,
url: U,
server_certificate: &Certificate,
client_key_pair: Option<KeyPair>
) -> Result<Connecting, Connect>
pub async fn connect_pinned<U: AsRef<str>>(
&self,
url: U,
server_certificate: &Certificate,
client_key_pair: Option<KeyPair>
) -> Result<Connecting, Connect>
Establishes a new Connection
to a server.
See connect
for more information on host name
resolution.
Notes
The root certificate store will be ignored and the given Certificate
will validate the server.
A client certificate KeyPair
set with
Builder::set_client_key_pair
will be ignored, use client_key_pair
to add a client certificate to this connection.
This method is intended for direct connection to a known server, the
domain name in the URL is not checked against the Certificate
.
Multiple domain names in the Certificate
aren’t supported.
Errors
error::Connect::MultipleDomains
if multiple domains are present in theCertificate
, which isn’t supportederror::Connect::ParseUrl
if the URL couldn’t be parsederror::Connect::Domain
if the URL didn’t contain a domainerror::Connect::Port
if the URL didn’t contain a porterror::Connect::ParseDomain
if the domain couldn’t be parsederror::Connect::TrustDns
if the URL couldn’t be resolved to an IP address withtrust-dns
error::Connect::StdDns
if the URL couldn’t be resolved to an IP address withToSocketAddrs
error::Connect::NoIp
if no IP address was found for that domain
Panics
Panics if the given Certificate
or KeyPair
are invalid. Can’t
happen if they were properly validated through Certificate::from_der
or KeyPair::from_parts
.
Examples
use fabruic::Endpoint;
let endpoint = Endpoint::new_client()?;
// the server certificate has to be imported from somewhere else
let connecting = endpoint
.connect_pinned("quic://localhost:443", &server_certificate, None)
.await?;
Get the local SocketAddr
the underlying socket is bound to.
Errors
std::io::Error
if aquiring the local address failed.
Examples
use fabruic::Endpoint;
let endpoint = Endpoint::new_client()?;
assert!(endpoint.local_address().is_ok());
Close all of this Endpoint
’s Connection
s
immediately and cease accepting new Connection
s.
To close an Endpoint
gracefully use
close_incoming
,
Sender::finish
and
wait_idle
.
Examples
use fabruic::Endpoint;
let endpoint = Endpoint::new_client()?;
endpoint.close();
Prevents any new incoming connections. Already incoming connections will
finish first. This will always return error::AlreadyClosed
if the
Endpoint
wasn’t started with a listener.
See Builder::set_server_key_pair
.
Errors
error::AlreadyClosed
if it was already closed.
Examples
use fabruic::{Endpoint, KeyPair};
let endpoint = Endpoint::new_server(0, KeyPair::new_self_signed("test"))?;
assert!(endpoint.close_incoming().await.is_ok());
Wait for all Connection
s to the Endpoint
to
be cleanly shut down. Does not close existing connections or cause
incoming connections to be rejected. See
close_incoming
.
Examples
use fabruic::Endpoint;
let endpoint = Endpoint::new_client()?;
endpoint.wait_idle().await;
Trait Implementations
dangerous
only.Establishes a new Connection
to a server without
verifying the servers Certificate
. The servers
CertificateChain
can still be manually
insepcted through
Connection::peer_identity
. Read more
Returns true
if the stream should no longer be polled.
type Item = Connecting
type Item = Connecting
Values yielded by the stream.
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
Auto Trait Implementations
impl !RefUnwindSafe for Endpoint
impl !UnwindSafe for Endpoint
Blanket Implementations
Mutably borrows from an owned value. Read more
Creates a future that resolves to the next item in the stream. Read more
Maps this stream’s items to a different type, returning a new stream of the resulting type. Read more
Creates a stream which gives the current iteration count as well as the next value. Read more
Filters the values produced by this stream according to the provided asynchronous predicate. Read more
fn filter_map<Fut, T, F>(self, f: F) -> FilterMap<Self, Fut, F> where
F: FnMut(Self::Item) -> Fut,
Fut: Future<Output = Option<T>>,
fn filter_map<Fut, T, F>(self, f: F) -> FilterMap<Self, Fut, F> where
F: FnMut(Self::Item) -> Fut,
Fut: Future<Output = Option<T>>,
Filters the values produced by this stream while simultaneously mapping them to a different type according to the provided asynchronous closure. Read more
Computes from this stream’s items new items of a different type using an asynchronous closure. Read more
Transforms a stream into a collection, returning a future representing the result of that computation. Read more
Converts a stream of pairs into a future, which resolves to pair of containers. Read more
fn concat(self) -> Concat<Self> where
Self::Item: Extend<<Self::Item as IntoIterator>::Item>,
Self::Item: IntoIterator,
Self::Item: Default,
fn concat(self) -> Concat<Self> where
Self::Item: Extend<<Self::Item as IntoIterator>::Item>,
Self::Item: IntoIterator,
Self::Item: Default,
Concatenate all items of a stream into a single extendable destination, returning a future representing the end result. Read more
Execute an accumulating asynchronous computation over a stream, collecting all the values into one final result. Read more
Execute predicate over asynchronous stream, and return true
if any element in stream satisfied a predicate. Read more
Execute predicate over asynchronous stream, and return true
if all element in stream satisfied a predicate. Read more
Flattens a stream of streams into just one continuous stream. Read more
Maps a stream like StreamExt::map
but flattens nested Stream
s. Read more
Combinator similar to StreamExt::fold
that holds internal state
and produces a new stream. Read more
fn skip_while<Fut, F>(self, f: F) -> SkipWhile<Self, Fut, F> where
F: FnMut(&Self::Item) -> Fut,
Fut: Future<Output = bool>,
fn skip_while<Fut, F>(self, f: F) -> SkipWhile<Self, Fut, F> where
F: FnMut(&Self::Item) -> Fut,
Fut: Future<Output = bool>,
Skip elements on this stream while the provided asynchronous predicate
resolves to true
. Read more
fn take_while<Fut, F>(self, f: F) -> TakeWhile<Self, Fut, F> where
F: FnMut(&Self::Item) -> Fut,
Fut: Future<Output = bool>,
fn take_while<Fut, F>(self, f: F) -> TakeWhile<Self, Fut, F> where
F: FnMut(&Self::Item) -> Fut,
Fut: Future<Output = bool>,
Take elements from this stream while the provided asynchronous predicate
resolves to true
. Read more
Take elements from this stream until the provided future resolves. Read more
Runs this stream to completion, executing the provided asynchronous closure for each element on the stream. Read more
Runs this stream to completion, executing the provided asynchronous closure for each element on the stream concurrently as elements become available. Read more
Creates a new stream of at most n
items of the underlying stream. Read more
Creates a new stream which skips n
items of the underlying stream. Read more
Catches unwinding panics while polling the stream. Read more
Wrap the stream in a Box, pinning it. Read more
fn boxed_local<'a>(self) -> Pin<Box<dyn Stream<Item = Self::Item> + 'a, Global>> where
Self: 'a,
fn boxed_local<'a>(self) -> Pin<Box<dyn Stream<Item = Self::Item> + 'a, Global>> where
Self: 'a,
Wrap the stream in a Box, pinning it. Read more
An adaptor for creating a buffered list of pending futures. Read more
An adaptor for creating a buffered list of pending futures (unordered). Read more
An adapter for zipping two streams together. Read more
Adapter for chaining two streams. Read more
An adaptor for chunking up items of the stream inside a vector. Read more
An adaptor for chunking up ready items of the stream inside a vector. Read more
Do something with each item of this stream, afterwards passing it on. Read more
Wrap this stream in an Either
stream, making it the left-hand variant
of that Either
. Read more
Wrap this stream in an Either
stream, making it the right-hand variant
of that Either
. Read more
pub fn vzip(self) -> V
Attaches the provided Subscriber
to this type, returning a
WithDispatch
wrapper. Read more
Attaches the current default Subscriber
to this type, returning a
WithDispatch
wrapper. Read more