Struct rustls::server::server_conn::ClientHello

source ·
pub struct ClientHello<'a> {
    server_name: &'a Option<DnsName>,
    signature_schemes: &'a [SignatureScheme],
    alpn: Option<&'a Vec<ProtocolName>>,
    cipher_suites: &'a [CipherSuite],
}
Expand description

A struct representing the received Client Hello

Fields§

§server_name: &'a Option<DnsName>§signature_schemes: &'a [SignatureScheme]§alpn: Option<&'a Vec<ProtocolName>>§cipher_suites: &'a [CipherSuite]

Implementations§

source§

impl<'a> ClientHello<'a>

source

pub(super) fn new( server_name: &'a Option<DnsName>, signature_schemes: &'a [SignatureScheme], alpn: Option<&'a Vec<ProtocolName>>, cipher_suites: &'a [CipherSuite], ) -> Self

Creates a new ClientHello

source

pub fn server_name(&self) -> Option<&str>

Get the server name indicator.

Returns None if the client did not supply a SNI.

source

pub fn signature_schemes(&self) -> &[SignatureScheme]

Get the compatible signature schemes.

Returns standard-specified default if the client omitted this extension.

source

pub fn alpn(&self) -> Option<impl Iterator<Item = &'a [u8]>>

Get the ALPN protocol identifiers submitted by the client.

Returns None if the client did not include an ALPN extension.

Application Layer Protocol Negotiation (ALPN) is a TLS extension that lets a client submit a set of identifiers that each a represent an application-layer protocol. The server will then pick its preferred protocol from the set submitted by the client. Each identifier is represented as a byte array, although common values are often ASCII-encoded. See the official RFC-7301 specifications at https://datatracker.ietf.org/doc/html/rfc7301 for more information on ALPN.

For example, a HTTP client might specify “http/1.1” and/or “h2”. Other well-known values are listed in the at IANA registry at https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids.

The server can specify supported ALPN protocols by setting ServerConfig::alpn_protocols. During the handshake, the server will select the first protocol configured that the client supports.

source

pub fn cipher_suites(&self) -> &[CipherSuite]

Get cipher suites.

Auto Trait Implementations§

§

impl<'a> Freeze for ClientHello<'a>

§

impl<'a> RefUnwindSafe for ClientHello<'a>

§

impl<'a> Send for ClientHello<'a>

§

impl<'a> Sync for ClientHello<'a>

§

impl<'a> Unpin for ClientHello<'a>

§

impl<'a> UnwindSafe for ClientHello<'a>

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, 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>,

§

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>,

§

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.