Struct QuicClient

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

A quic client that can initiates connections to servers.

Implementations§

Source§

impl QuicClient

Source

pub fn builder() -> QuicClientBuilder<ConfigBuilder<ClientConfig, WantsVerifier>>

Start to build a QuicClient.

Make sure that you have installed the rustls crypto provider before calling this method. If you dont want to use the default crypto provider, you can use QuicClient::builder_with_crypto_provieder to specify the crypto provider.

You can also use QuicClient::builder_with_tls to specify the TLS configuration.

§Examples
use gm_quic::QuicClient;
use std::net::{Ipv4Addr, Ipv6Addr, SocketAddr};

rustls::crypto::ring::default_provider()
    .install_default()
    .expect("Failed to install rustls crypto provider");

let client_builder = QuicClient::builder()
    .reuse_connection()
    .prefer_versions([0x00000001u32]);
Source

pub fn builder_with_crypto_provieder( provider: Arc<CryptoProvider>, ) -> QuicClientBuilder<ConfigBuilder<ClientConfig, WantsVerifier>>

Start to build a QuicClient with the given tls crypto provider.

Source

pub fn builder_with_tls( tls_config: TlsClientConfig, ) -> QuicClientBuilder<TlsClientConfig>

Start to build a QuicClient with the given TLS configuration.

This is useful when you want to customize the TLS configuration, or integrate qm-quic with other crates.

Source

pub fn connect( &self, server_name: impl Into<String>, server_ep: impl ToEndpointAddr, ) -> Result<Arc<Connection>>

Returns the connection to the specified server.

server_name is the name of the server, it will be included in the ClientHello message.

server_addr is the address of the server, packets will be sent to this address.

Note that the returned connection may not yet be connected to the server, but you can use it to do anything you want, such as sending data, receiving data… operations will be pending until the connection is connected or failed to connect.

§Select an interface

First, the client will select an interface to communicate with the server.

If the client has already bound a set of addresses, The client will select the interface whose IP family of the first address matches the server addr from the bound and not closed interfaces.

If reuse_address is not enabled; the client will not select an interface that is in use.

§Connecte to server

If connection reuse is enabled, the client will give priority to returning the existing connection to the server_name and server_addr.

If the client does not bind any interface, the client will bind the interface on the address/port randomly assigned by the system (i.e. xxx) through quic_iface_factory every time it establishes a connection. When no interface is bound, the reuse interface option will have no effect.

If reuse connection is not enabled or there is no connection that can be reused, the client will initiates a new connection to the server.

Trait Implementations§

Source§

impl Drop for QuicClient

Source§

fn drop(&mut self)

Executes the destructor for this 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.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

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

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

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

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more