Struct HttpMitmRelay
pub struct HttpMitmRelay<M = (ConsumeErrLayer<Trace, StaticOutput<DefaultErrorResponse>>, ArcLayer)> { /* private fields */ }http-full and http and std only.Expand description
A utility that can be used by MITM services such as transparent proxies, in order to relay HTTP requests and responses between a client and server, as part of a deep protocol inspection protocol (DPI) flow.
Useful if you have a fairly standard MITM http flow and already have pre-established ingress and egress connections (e.g. because you already MITM’d the <L7 layers, such as SOCKS5 MITM’ng, TLS, …).
The relay does not consume proxy-authentication fields: a transparent
intermediary may be forwarding them to the proxy that owns the exchange.
A proxy that owns that exchange should explicitly apply the proxy_auth
request and response removal layers in its middleware.
Implementations§
§impl HttpMitmRelay
impl HttpMitmRelay
pub fn new(exec: Executor) -> HttpMitmRelay
pub fn new(exec: Executor) -> HttpMitmRelay
Create a new HttpMitmRelay, ready to serve.
pub fn with_http_middleware<M>(self, middleware: M) -> HttpMitmRelay<M>
pub fn with_http_middleware<M>(self, middleware: M) -> HttpMitmRelay<M>
Set HTTP middleware to use between server and client.
Context-aware hop-by-hop sanitation remains at the relay boundary. Fields received from each connection are consumed before this middleware handles the message. Transport intent added by the middleware is therefore originated for the next connection.
§impl<M> HttpMitmRelay<M>
impl<M> HttpMitmRelay<M>
pub fn with_eager_peer_settings_timeout(
self,
timeout: Duration,
) -> HttpMitmRelay<M>
pub fn with_eager_peer_settings_timeout( self, timeout: Duration, ) -> HttpMitmRelay<M>
Hard cap on how long the eager phase-2 init waits for the
upstream’s initial h2 SETTINGS frame before giving up and
proceeding without mirroring. Defaults to
DEFAULT_EAGER_PEER_SETTINGS_TIMEOUT. Only applies when
the egress IO carries TargetHttpVersion(HTTP_2).
pub fn set_eager_peer_settings_timeout(
&mut self,
timeout: Duration,
) -> &mut HttpMitmRelay<M>
pub fn set_eager_peer_settings_timeout( &mut self, timeout: Duration, ) -> &mut HttpMitmRelay<M>
Hard cap on how long the eager phase-2 init waits for the
upstream’s initial h2 SETTINGS frame before giving up and
proceeding without mirroring. Defaults to
DEFAULT_EAGER_PEER_SETTINGS_TIMEOUT. Only applies when
the egress IO carries TargetHttpVersion(HTTP_2).
Trait Implementations§
§impl<M> Clone for HttpMitmRelay<M>where
M: Clone,
impl<M> Clone for HttpMitmRelay<M>where
M: Clone,
§fn clone(&self) -> HttpMitmRelay<M>
fn clone(&self) -> HttpMitmRelay<M>
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more§impl<M> Debug for HttpMitmRelay<M>where
M: Debug,
impl<M> Debug for HttpMitmRelay<M>where
M: Debug,
§impl<Ingress, Egress, M> Service<BridgeIo<Ingress, Egress>> for HttpMitmRelay<M>where
Ingress: Io + Unpin + ExtensionsRef,
Egress: Io + Unpin + ExtensionsRef,
(RemoveRequestHeaderLayer, M, RemoveResponseHeaderLayer): Layer<HttpClientService<Body>> + Clone,
<(RemoveRequestHeaderLayer, M, RemoveResponseHeaderLayer) as Layer<HttpClientService<Body>>>::Service: Service<Request, Output = Response> + Clone,
<<(RemoveRequestHeaderLayer, M, RemoveResponseHeaderLayer) as Layer<HttpClientService<Body>>>::Service as Service<Request>>::Error: Into<Box<dyn Error + Send + Sync>>,
M: Send + Sync + 'static + Clone,
impl<Ingress, Egress, M> Service<BridgeIo<Ingress, Egress>> for HttpMitmRelay<M>where
Ingress: Io + Unpin + ExtensionsRef,
Egress: Io + Unpin + ExtensionsRef,
(RemoveRequestHeaderLayer, M, RemoveResponseHeaderLayer): Layer<HttpClientService<Body>> + Clone,
<(RemoveRequestHeaderLayer, M, RemoveResponseHeaderLayer) as Layer<HttpClientService<Body>>>::Service: Service<Request, Output = Response> + Clone,
<<(RemoveRequestHeaderLayer, M, RemoveResponseHeaderLayer) as Layer<HttpClientService<Body>>>::Service as Service<Request>>::Error: Into<Box<dyn Error + Send + Sync>>,
M: Send + Sync + 'static + Clone,
§async fn serve(
&self,
__arg1: BridgeIo<Ingress, Egress>,
) -> Result<<HttpMitmRelay<M> as Service<BridgeIo<Ingress, Egress>>>::Output, <HttpMitmRelay<M> as Service<BridgeIo<Ingress, Egress>>>::Error>
async fn serve( &self, __arg1: BridgeIo<Ingress, Egress>, ) -> Result<<HttpMitmRelay<M> as Service<BridgeIo<Ingress, Egress>>>::Output, <HttpMitmRelay<M> as Service<BridgeIo<Ingress, Egress>>>::Error>
§fn boxed(self) -> BoxService<Input, Self::Output, Self::Error>
fn boxed(self) -> BoxService<Input, Self::Output, Self::Error>
Auto Trait Implementations§
impl<M> Freeze for HttpMitmRelay<M>where
M: Freeze,
impl<M> RefUnwindSafe for HttpMitmRelay<M>where
M: RefUnwindSafe,
impl<M> Send for HttpMitmRelay<M>where
M: Send,
impl<M> Sync for HttpMitmRelay<M>where
M: Sync,
impl<M> Unpin for HttpMitmRelay<M>where
M: Unpin,
impl<M> UnsafeUnpin for HttpMitmRelay<M>where
M: UnsafeUnpin,
impl<M> UnwindSafe for HttpMitmRelay<M>where
M: 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
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> 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