Struct ClientHelloAssembly
pub struct ClientHelloAssembly { /* private fields */ }quic and std only.Expand description
Reassembles a client’s ClientHello from CRYPTO data taken in fragment by fragment, in any order and with any retransmissions.
Before the header arrives, only received bytes are retained in bounded sparse fragments; a high offset cannot force a large allocation. Once the header arrives, fragments are copied into one buffer sized to the bounded message, and later data is written in place. Every byte seen twice must agree, including retransmissions after the ClientHello is complete: an inspector and the endpoint that later accepts the attempt cannot be shown different names or protocol offers.
The message, and with it the buffer, is bounded by CaptureLimits::client_hello_bytes;
the disjoint ranges and pre-header fragments by CaptureLimits::crypto_fragments. Data past the end of
the ClientHello is not needed and is ignored.
Implementations§
§impl ClientHelloAssembly
impl ClientHelloAssembly
pub fn new(limits: &CaptureLimits) -> ClientHelloAssembly
pub fn take_in(&mut self, offset: u64, data: &[u8]) -> Result<(), CaptureError>
pub fn take_in(&mut self, offset: u64, data: &[u8]) -> Result<(), CaptureError>
Take in CRYPTO data at offset.
pub fn client_hello(&self) -> Option<&[u8]>
pub fn client_hello(&self) -> Option<&[u8]>
The complete ClientHello handshake message, once every byte of it arrived.
Trait Implementations§
Auto Trait Implementations§
impl Forget for ClientHelloAssembly
impl Freeze for ClientHelloAssembly
impl Move for ClientHelloAssembly
impl RefUnwindSafe for ClientHelloAssembly
impl Send for ClientHelloAssembly
impl Sync for ClientHelloAssembly
impl Unpin for ClientHelloAssembly
impl UnsafeUnpin for ClientHelloAssembly
impl UnwindSafe for ClientHelloAssembly
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
§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> 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