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>
impl<'a> ClientHello<'a>
sourcepub(super) fn new(
server_name: &'a Option<DnsName>,
signature_schemes: &'a [SignatureScheme],
alpn: Option<&'a Vec<ProtocolName>>,
cipher_suites: &'a [CipherSuite],
) -> Self
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
sourcepub fn server_name(&self) -> Option<&str>
pub fn server_name(&self) -> Option<&str>
Get the server name indicator.
Returns None
if the client did not supply a SNI.
sourcepub fn signature_schemes(&self) -> &[SignatureScheme]
pub fn signature_schemes(&self) -> &[SignatureScheme]
Get the compatible signature schemes.
Returns standard-specified default if the client omitted this extension.
sourcepub fn alpn(&self) -> Option<impl Iterator<Item = &'a [u8]>>
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.
sourcepub fn cipher_suites(&self) -> &[CipherSuite]
pub fn cipher_suites(&self) -> &[CipherSuite]
Get cipher suites.