Struct PeekTlsClientHelloService
pub struct PeekTlsClientHelloService<S, F = RejectService<(), NoTlsRejectError>> { /* private fields */ }Expand description
A peek Service which returns the ClientHello to the inner
service for tls-detected traffic, and otherwise make use of the Reject service.
The difference with SniRouter is that the entire
ClientHello is parsed and returned instead of just the SNI. Use the router
in case all you care about is the SNI, given it is more efficient.
By default non-tls traffic is rejected using RejectService.
Use PeekTlsClientHelloService::with_fallback to configure the fallback service.
Use the standalone peek_client_hello_from_input function if you prefer
this is as a standalone function instead.
Implementations§
§impl<S> PeekTlsClientHelloService<S>
impl<S> PeekTlsClientHelloService<S>
pub fn new(service: S) -> PeekTlsClientHelloService<S>
pub fn new(service: S) -> PeekTlsClientHelloService<S>
Create a new PeekTlsClientHelloService.
pub fn with_fallback<F>(self, fallback: F) -> PeekTlsClientHelloService<S, F>
pub fn with_fallback<F>(self, fallback: F) -> PeekTlsClientHelloService<S, F>
Attach a fallback Service to this PeekTlsClientHelloService.
Used in case the traffic is not Tls traffic (defined by the first bytes).
§impl<S, F> PeekTlsClientHelloService<S, F>
impl<S, F> PeekTlsClientHelloService<S, F>
pub fn maybe_with_peek_timeout(
self,
peek_timeout: Option<Duration>,
) -> PeekTlsClientHelloService<S, F>
pub fn maybe_with_peek_timeout( self, peek_timeout: Option<Duration>, ) -> PeekTlsClientHelloService<S, F>
Set the peek window to timeout on
pub fn maybe_set_peek_timeout(
&mut self,
peek_timeout: Option<Duration>,
) -> &mut PeekTlsClientHelloService<S, F>
pub fn maybe_set_peek_timeout( &mut self, peek_timeout: Option<Duration>, ) -> &mut PeekTlsClientHelloService<S, F>
Set the peek window to timeout on
pub fn with_peek_timeout(
self,
peek_timeout: Duration,
) -> PeekTlsClientHelloService<S, F>
pub fn with_peek_timeout( self, peek_timeout: Duration, ) -> PeekTlsClientHelloService<S, F>
Set the peek window to timeout on
pub fn set_peek_timeout(
&mut self,
peek_timeout: Duration,
) -> &mut PeekTlsClientHelloService<S, F>
pub fn set_peek_timeout( &mut self, peek_timeout: Duration, ) -> &mut PeekTlsClientHelloService<S, F>
Set the peek window to timeout on
pub fn without_peek_timeout(self) -> PeekTlsClientHelloService<S, F>
pub fn without_peek_timeout(self) -> PeekTlsClientHelloService<S, F>
Set the peek window to timeout on
pub fn unset_peek_timeout(&mut self) -> &mut PeekTlsClientHelloService<S, F>
pub fn unset_peek_timeout(&mut self) -> &mut PeekTlsClientHelloService<S, F>
Set the peek window to timeout on
Trait Implementations§
§impl<S, F> Clone for PeekTlsClientHelloService<S, F>
impl<S, F> Clone for PeekTlsClientHelloService<S, F>
§fn clone(&self) -> PeekTlsClientHelloService<S, F>
fn clone(&self) -> PeekTlsClientHelloService<S, F>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more§impl<S, F> Debug for PeekTlsClientHelloService<S, F>
impl<S, F> Debug for PeekTlsClientHelloService<S, F>
§impl<PeekableInput, Output, S, F> Service<PeekableInput> for PeekTlsClientHelloService<S, F>where
PeekableInput: PeekIoProvider,
<PeekableInput as PeekIoProvider>::PeekIo: Unpin,
Output: Send + 'static,
S: Service<InputWithClientHello<<PeekableInput as PeekIoProvider>::Mapped<PrefixedIo<HeapReader, <PeekableInput as PeekIoProvider>::PeekIo>>>, Output = Output>,
<S as Service<InputWithClientHello<<PeekableInput as PeekIoProvider>::Mapped<PrefixedIo<HeapReader, <PeekableInput as PeekIoProvider>::PeekIo>>>>>::Error: Into<Box<dyn Error + Send + Sync>>,
F: Service<<PeekableInput as PeekIoProvider>::Mapped<PrefixedIo<HeapReader, <PeekableInput as PeekIoProvider>::PeekIo>>, Output = Output>,
<F as Service<<PeekableInput as PeekIoProvider>::Mapped<PrefixedIo<HeapReader, <PeekableInput as PeekIoProvider>::PeekIo>>>>::Error: Into<Box<dyn Error + Send + Sync>>,
impl<PeekableInput, Output, S, F> Service<PeekableInput> for PeekTlsClientHelloService<S, F>where
PeekableInput: PeekIoProvider,
<PeekableInput as PeekIoProvider>::PeekIo: Unpin,
Output: Send + 'static,
S: Service<InputWithClientHello<<PeekableInput as PeekIoProvider>::Mapped<PrefixedIo<HeapReader, <PeekableInput as PeekIoProvider>::PeekIo>>>, Output = Output>,
<S as Service<InputWithClientHello<<PeekableInput as PeekIoProvider>::Mapped<PrefixedIo<HeapReader, <PeekableInput as PeekIoProvider>::PeekIo>>>>>::Error: Into<Box<dyn Error + Send + Sync>>,
F: Service<<PeekableInput as PeekIoProvider>::Mapped<PrefixedIo<HeapReader, <PeekableInput as PeekIoProvider>::PeekIo>>, Output = Output>,
<F as Service<<PeekableInput as PeekIoProvider>::Mapped<PrefixedIo<HeapReader, <PeekableInput as PeekIoProvider>::PeekIo>>>>::Error: Into<Box<dyn Error + Send + Sync>>,
§async fn serve(
&self,
input: PeekableInput,
) -> Result<<PeekTlsClientHelloService<S, F> as Service<PeekableInput>>::Output, <PeekTlsClientHelloService<S, F> as Service<PeekableInput>>::Error>
async fn serve( &self, input: PeekableInput, ) -> Result<<PeekTlsClientHelloService<S, F> as Service<PeekableInput>>::Output, <PeekTlsClientHelloService<S, F> as Service<PeekableInput>>::Error>
§fn boxed(self) -> BoxService<Input, Self::Output, Self::Error>
fn boxed(self) -> BoxService<Input, Self::Output, Self::Error>
Auto Trait Implementations§
impl<S, F> Freeze for PeekTlsClientHelloService<S, F>
impl<S, F> RefUnwindSafe for PeekTlsClientHelloService<S, F>where
S: RefUnwindSafe,
F: RefUnwindSafe,
impl<S, F> Send for PeekTlsClientHelloService<S, F>
impl<S, F> Sync for PeekTlsClientHelloService<S, F>
impl<S, F> Unpin for PeekTlsClientHelloService<S, F>
impl<S, F> UnsafeUnpin for PeekTlsClientHelloService<S, F>where
S: UnsafeUnpin,
F: UnsafeUnpin,
impl<S, F> UnwindSafe for PeekTlsClientHelloService<S, F>where
S: UnwindSafe,
F: UnwindSafe,
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<S, Input, Connection> ConnectorService<Input> for S
impl<S, Input, Connection> ConnectorService<Input> for S
§type Connection = Connection
type Connection = Connection
ConnectorService§fn connect(
&self,
input: Input,
) -> impl Future<Output = Result<EstablishedClientConnection<<S as ConnectorService<Input>>::Connection, Input>, <S as ConnectorService<Input>>::Error>> + Send
fn connect( &self, input: Input, ) -> impl Future<Output = Result<EstablishedClientConnection<<S as ConnectorService<Input>>::Connection, Input>, <S as ConnectorService<Input>>::Error>> + Send
§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