Struct ClientHello
pub struct ClientHello { /* private fields */ }rustls only.Expand description
When a client first connects to a server, it is required to send the ClientHello as its first message.
The ClientHello contains random data, cipher suites, legacy content from <= TLS.12 and extensions.
For Rama however we only focus on the parts which a user might want to inspect and/or set.
Implementations§
§impl ClientHello
impl ClientHello
pub fn new( protocol_version: ProtocolVersion, cipher_suites: Vec<CipherSuite>, compression_algorithms: Vec<CompressionAlgorithm>, extensions: Vec<ClientHelloExtension>, ) -> ClientHello
boring only.pub fn protocol_version(&self) -> ProtocolVersion
Available on crate feature boring only.
pub fn protocol_version(&self) -> ProtocolVersion
boring only.Return all ProtocolVersions defined in this ClientHello.
pub fn cipher_suites(&self) -> &[CipherSuite]
Available on crate feature boring only.
pub fn cipher_suites(&self) -> &[CipherSuite]
boring only.Return all CipherSuites defined in this ClientHello.
pub fn compression_algorithms(&self) -> &[CompressionAlgorithm]
Available on crate feature boring only.
pub fn compression_algorithms(&self) -> &[CompressionAlgorithm]
boring only.Return all CompressionAlgorithms defined in this ClientHello.
pub fn extensions(&self) -> &[ClientHelloExtension]
Available on crate feature boring only.
pub fn extensions(&self) -> &[ClientHelloExtension]
boring only.Return all ClientHelloExtensions defined in this ClientHello.
pub fn ext_server_name(&self) -> Option<&Domain>
Available on crate feature boring only.
pub fn ext_server_name(&self) -> Option<&Domain>
boring only.Return the server name (SNI) if it is set in the ClientHelloExtension defined in this ClientHello.
See ClientHelloExtension::ServerName for more information about the server name.
pub fn ext_supported_groups(&self) -> Option<&[SupportedGroup]>
Available on crate feature boring only.
pub fn ext_supported_groups(&self) -> Option<&[SupportedGroup]>
boring only.Return the elliptic curves supported by this client
if it is set in the ClientHelloExtension defined in this ClientHello.
See ClientHelloExtension::SupportedGroups for more information about these curves.
pub fn ext_ec_point_formats(&self) -> Option<&[ECPointFormat]>
Available on crate feature boring only.
pub fn ext_ec_point_formats(&self) -> Option<&[ECPointFormat]>
boring only.Return the EC point formats supported by this client
if it is set in the ClientHelloExtension defined in this ClientHello.
See ClientHelloExtension::ECPointFormats for more information about this.
pub fn ext_signature_algorithms(&self) -> Option<&[SignatureScheme]>
Available on crate feature boring only.
pub fn ext_signature_algorithms(&self) -> Option<&[SignatureScheme]>
boring only.Return the signature algorithms supported by this client
if it is set in the ClientHelloExtension defined in this ClientHello.
See ClientHelloExtension::SignatureAlgorithms for more information about these algorithms
pub fn ext_alpn(&self) -> Option<&[ApplicationProtocol]>
Available on crate feature boring only.
pub fn ext_alpn(&self) -> Option<&[ApplicationProtocol]>
boring only.Return the application layer protocols supported for negotiation by this client
if it is set in the ClientHelloExtension defined in this ClientHello.
See ClientHelloExtension::ApplicationLayerProtocolNegotiation for more information about these protocols (ALPN).
pub fn ext_alps(&self) -> Option<&[ApplicationProtocol]>
Available on crate feature boring only.
pub fn ext_alps(&self) -> Option<&[ApplicationProtocol]>
boring only.Return the application layer protocols for which alps is supported
if it is set in the ClientHelloExtension defined in this ClientHello.
See ClientHelloExtension::ApplicationSettings for more information about these protocols (ALPS).
pub fn supported_versions(&self) -> Option<&[ProtocolVersion]>
Available on crate feature boring only.
pub fn supported_versions(&self) -> Option<&[ProtocolVersion]>
boring only.Return the TLS versions supported by this client
if it is set in the ClientHelloExtension defined in this ClientHello.
See ClientHelloExtension::SupportedVersions for more information about these versions
pub fn has_encrypted_client_hello(&self) -> bool
Available on crate feature boring only.
pub fn has_encrypted_client_hello(&self) -> bool
boring only.Return true when this ClientHello carries an
EncryptedClientHello extension. Useful for triage: trailing
trailer-content parse warnings often correlate with ECH-using
clients (e.g. recent Firefox builds), and a structured ech
field on the parse log lets operators grep ech=true rather
than infer.
Trait Implementations§
§impl Clone for ClientHello
impl Clone for ClientHello
§fn clone(&self) -> ClientHello
fn clone(&self) -> ClientHello
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more§impl Debug for ClientHello
impl Debug for ClientHello
§impl<'de> Deserialize<'de> for ClientHello
impl<'de> Deserialize<'de> for ClientHello
§fn deserialize<__D>(
__deserializer: __D,
) -> Result<ClientHello, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<ClientHello, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
§impl Hash for ClientHello
impl Hash for ClientHello
§impl RamaFrom<&ClientHello, RamaTlsBoringCrateMarker> for TlsClientConfig
impl RamaFrom<&ClientHello, RamaTlsBoringCrateMarker> for TlsClientConfig
fn rama_from(hello: &ClientHello) -> TlsClientConfig
§impl<'a> RamaFrom<ClientHello<'a>, RamaTlsRustlsCrateMarker> for ClientHello
impl<'a> RamaFrom<ClientHello<'a>, RamaTlsRustlsCrateMarker> for ClientHello
fn rama_from(value: ClientHello<'a>) -> ClientHello
§impl<'ssl> RamaTryFrom<&ClientHello<'ssl>, RamaTlsBoringCrateMarker> for ClientHello
impl<'ssl> RamaTryFrom<&ClientHello<'ssl>, RamaTlsBoringCrateMarker> for ClientHello
type Error = Box<dyn Error + Sync + Send>
fn rama_try_from( value: &ClientHello<'ssl>, ) -> Result<ClientHello, <ClientHello as RamaTryFrom<&ClientHello<'ssl>, RamaTlsBoringCrateMarker>>::Error>
§impl<'ssl> RamaTryFrom<ClientHello<'ssl>, RamaTlsBoringCrateMarker> for ClientHello
impl<'ssl> RamaTryFrom<ClientHello<'ssl>, RamaTlsBoringCrateMarker> for ClientHello
type Error = Box<dyn Error + Sync + Send>
fn rama_try_from( value: ClientHello<'ssl>, ) -> Result<ClientHello, <ClientHello as RamaTryFrom<ClientHello<'ssl>, RamaTlsBoringCrateMarker>>::Error>
§impl Serialize for ClientHello
impl Serialize for ClientHello
§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
Auto Trait Implementations§
impl Freeze for ClientHello
impl RefUnwindSafe for ClientHello
impl Send for ClientHello
impl Sync for ClientHello
impl Unpin for ClientHello
impl UnsafeUnpin for ClientHello
impl UnwindSafe for ClientHello
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Conv for T
impl<T> Conv for T
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
impl<T> ErasedDestructor for Twhere
T: 'static,
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
§fn with_current_context(self) -> WithContext<Self> ⓘ
fn with_current_context(self) -> WithContext<Self> ⓘ
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a rama_grpc::Request§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§fn and<P, B, E>(self, other: P) -> And<T, P>
fn and<P, B, E>(self, other: P) -> And<T, P>
Policy that returns Action::Follow only if self and other return
Action::Follow. Read more§impl<T, U> RamaTryFrom<T> for Uwhere
U: TryFrom<T>,
impl<T, U> RamaTryFrom<T> for Uwhere
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
fn rama_try_from(value: T) -> Result<U, <U as RamaTryFrom<T>>::Error>
§impl<T, U, CrateMarker> RamaTryInto<U, CrateMarker> for Twhere
U: RamaTryFrom<T, CrateMarker>,
impl<T, U, CrateMarker> RamaTryInto<U, CrateMarker> for Twhere
U: RamaTryFrom<T, CrateMarker>,
type Error = <U as RamaTryFrom<T, CrateMarker>>::Error
fn rama_try_into(self) -> Result<U, <U as RamaTryFrom<T, CrateMarker>>::Error>
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.