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.
Each fragment is written straight to its place in one buffer; only which offsets arrived is tracked beside it, so reassembly costs no allocation per fragment, and the buffer is sized to the message exactly once its header arrived. 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 received 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 Freeze 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