Struct HttpUpgradeMitmRelay
pub struct HttpUpgradeMitmRelay<M, S> { /* private fields */ }http and std only.Expand description
Http middleware that can be used by MITM proxies, such as transparent (L4) proxies to relay a HTTP upgrade-request as-is and pipe the upgraded upgrade request on both ends via the upgrade (bridgeIo) svc.
Matchers and response middleware select protocol metadata with
HttpUpgradeMitmRelayExtensions. Request selections reach the ingress
transport and response selections reach the egress transport, after both
upgrades succeed. Each upgraded transport otherwise retains its own
connection or HTTP/2 stream state.
See HttpUpgradeMitmRelayExtensions for an example of selecting metadata.
Implementations§
§impl<M, S> HttpUpgradeMitmRelay<M, S>
impl<M, S> HttpUpgradeMitmRelay<M, S>
pub fn new(
exec: Executor,
nested_matcher_svc: M,
inner_svc: S,
) -> HttpUpgradeMitmRelay<M, S>
pub fn new( exec: Executor, nested_matcher_svc: M, inner_svc: S, ) -> HttpUpgradeMitmRelay<M, S>
Create a new HttpUpgradeMitmRelay.
pub fn with_error_sink(self, sink: impl ErrorSink) -> HttpUpgradeMitmRelay<M, S>
pub fn with_error_sink(self, sink: impl ErrorSink) -> HttpUpgradeMitmRelay<M, S>
Set a custom ErrorSink used to observe errors from the detached
relay task (relay-service failures and upgrade failures on either side).
Defaults to TracingErrorSink::default (traces at DEBUG level).
Trait Implementations§
§impl<M, S> Clone for HttpUpgradeMitmRelay<M, S>
impl<M, S> Clone for HttpUpgradeMitmRelay<M, S>
§fn clone(&self) -> HttpUpgradeMitmRelay<M, S>
fn clone(&self) -> HttpUpgradeMitmRelay<M, S>
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, S> Debug for HttpUpgradeMitmRelay<M, S>
impl<M, S> Debug for HttpUpgradeMitmRelay<M, S>
§impl<M, S, ReqBody, ModReqBody, ResBody, ModResBody> Service<Request<ReqBody>> for HttpUpgradeMitmRelay<M, S>where
<M as ServiceMatcher<Request<ReqBody>>>::Error: IntoResponse,
<M as ServiceMatcher<Request<ReqBody>>>::Service: ServiceMatcher<Response<ResBody>, ModifiedInput = Response<ModResBody>>,
<<M as ServiceMatcher<Request<ReqBody>>>::Service as ServiceMatcher<Response<ResBody>>>::Error: Into<<S as Service<Request>>::Error>,
<<M as ServiceMatcher<Request<ReqBody>>>::Service as ServiceMatcher<Response<ResBody>>>::Service: Service<BridgeIo<Upgraded, Upgraded>>,
<<<M as ServiceMatcher<Request<ReqBody>>>::Service as ServiceMatcher<Response<ResBody>>>::Service as Service<BridgeIo<Upgraded, Upgraded>>>::Error: Into<Box<dyn Error + Send + Sync>>,
S: Service<Request, Output = Response<ResBody>>,
ReqBody: Body<Data = Bytes> + Send + Sync + 'static,
<ReqBody as Body>::Error: Into<Box<dyn Error + Send + Sync>>,
ModReqBody: Body<Data = Bytes> + Send + Sync + 'static,
<ModReqBody as Body>::Error: Into<Box<dyn Error + Send + Sync>>,
ResBody: Body<Data = Bytes> + Send + Sync + 'static,
<ResBody as Body>::Error: Into<Box<dyn Error + Send + Sync>>,
ModResBody: Body<Data = Bytes> + Send + Sync + 'static,
M: ServiceMatcher<Request<ReqBody>, ModifiedInput = Request<ModReqBody>>,
<ModResBody as Body>::Error: Into<Box<dyn Error + Send + Sync>>,
impl<M, S, ReqBody, ModReqBody, ResBody, ModResBody> Service<Request<ReqBody>> for HttpUpgradeMitmRelay<M, S>where
<M as ServiceMatcher<Request<ReqBody>>>::Error: IntoResponse,
<M as ServiceMatcher<Request<ReqBody>>>::Service: ServiceMatcher<Response<ResBody>, ModifiedInput = Response<ModResBody>>,
<<M as ServiceMatcher<Request<ReqBody>>>::Service as ServiceMatcher<Response<ResBody>>>::Error: Into<<S as Service<Request>>::Error>,
<<M as ServiceMatcher<Request<ReqBody>>>::Service as ServiceMatcher<Response<ResBody>>>::Service: Service<BridgeIo<Upgraded, Upgraded>>,
<<<M as ServiceMatcher<Request<ReqBody>>>::Service as ServiceMatcher<Response<ResBody>>>::Service as Service<BridgeIo<Upgraded, Upgraded>>>::Error: Into<Box<dyn Error + Send + Sync>>,
S: Service<Request, Output = Response<ResBody>>,
ReqBody: Body<Data = Bytes> + Send + Sync + 'static,
<ReqBody as Body>::Error: Into<Box<dyn Error + Send + Sync>>,
ModReqBody: Body<Data = Bytes> + Send + Sync + 'static,
<ModReqBody as Body>::Error: Into<Box<dyn Error + Send + Sync>>,
ResBody: Body<Data = Bytes> + Send + Sync + 'static,
<ResBody as Body>::Error: Into<Box<dyn Error + Send + Sync>>,
ModResBody: Body<Data = Bytes> + Send + Sync + 'static,
M: ServiceMatcher<Request<ReqBody>, ModifiedInput = Request<ModReqBody>>,
<ModResBody as Body>::Error: Into<Box<dyn Error + Send + Sync>>,
§async fn serve(
&self,
req: Request<ReqBody>,
) -> Result<<HttpUpgradeMitmRelay<M, S> as Service<Request<ReqBody>>>::Output, <HttpUpgradeMitmRelay<M, S> as Service<Request<ReqBody>>>::Error>
async fn serve( &self, req: Request<ReqBody>, ) -> Result<<HttpUpgradeMitmRelay<M, S> as Service<Request<ReqBody>>>::Output, <HttpUpgradeMitmRelay<M, S> as Service<Request<ReqBody>>>::Error>
§fn boxed(self) -> BoxService<Input, Self::Output, Self::Error>
fn boxed(self) -> BoxService<Input, Self::Output, Self::Error>
Auto Trait Implementations§
impl<M, S> !RefUnwindSafe for HttpUpgradeMitmRelay<M, S>
impl<M, S> !UnwindSafe for HttpUpgradeMitmRelay<M, S>
impl<M, S> Freeze for HttpUpgradeMitmRelay<M, S>
impl<M, S> Send for HttpUpgradeMitmRelay<M, S>
impl<M, S> Sync for HttpUpgradeMitmRelay<M, S>
impl<M, S> Unpin for HttpUpgradeMitmRelay<M, S>
impl<M, S> UnsafeUnpin for HttpUpgradeMitmRelay<M, S>where
M: UnsafeUnpin,
S: UnsafeUnpin,
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, ReqBody, ResBody> GrpcService<ReqBody> for T
impl<T, ReqBody, ResBody> GrpcService<ReqBody> for T
§type ResponseBody = ResBody
type ResponseBody = ResBody
§fn serve(
&self,
request: Request<ReqBody>,
) -> impl Future<Output = Result<Response<<T as GrpcService<ReqBody>>::ResponseBody>, <T as GrpcService<ReqBody>>::Error>> + Send
fn serve( &self, request: Request<ReqBody>, ) -> impl Future<Output = Result<Response<<T as GrpcService<ReqBody>>::ResponseBody>, <T as GrpcService<ReqBody>>::Error>> + Send
§impl<S, Body> HttpClientExt for S
impl<S, Body> HttpClientExt for S
§type ExecuteResponse = Response<Body>
type ExecuteResponse = Response<Body>
execute method.§type ExecuteError = <S as Service<Request>>::Error
type ExecuteError = <S as Service<Request>>::Error
execute method.§fn get(
&self,
url: impl IntoUrl,
) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
fn get( &self, url: impl IntoUrl, ) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
GET request to a URL. Read more§fn post(
&self,
url: impl IntoUrl,
) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
fn post( &self, url: impl IntoUrl, ) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
POST request to a URL. Read more§fn put(
&self,
url: impl IntoUrl,
) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
fn put( &self, url: impl IntoUrl, ) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
PUT request to a URL. Read more§fn patch(
&self,
url: impl IntoUrl,
) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
fn patch( &self, url: impl IntoUrl, ) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
PATCH request to a URL. Read more§fn delete(
&self,
url: impl IntoUrl,
) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
fn delete( &self, url: impl IntoUrl, ) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
DELETE request to a URL. Read more§fn head(
&self,
url: impl IntoUrl,
) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
fn head( &self, url: impl IntoUrl, ) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
HEAD request to a URL. Read more§fn connect(
&self,
url: impl IntoUrl,
) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
fn connect( &self, url: impl IntoUrl, ) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
CONNECT request to a URL. Read more§fn request(
&self,
method: Method,
url: impl IntoUrl,
) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
fn request( &self, method: Method, url: impl IntoUrl, ) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
§fn build_from_request<RequestBody>(
&self,
request: Request<RequestBody>,
) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
fn build_from_request<RequestBody>( &self, request: Request<RequestBody>, ) -> RequestBuilder<'_, S, <S as HttpClientExt>::ExecuteResponse>
§fn execute(
&self,
request: Request,
) -> impl Future<Output = Result<<S as HttpClientExt>::ExecuteResponse, <S as HttpClientExt>::ExecuteError>>
fn execute( &self, request: Request, ) -> impl Future<Output = Result<<S as HttpClientExt>::ExecuteResponse, <S as HttpClientExt>::ExecuteError>>
Request. Read more§impl<S, Body> HttpClientWebSocketExt<Body> for S
impl<S, Body> HttpClientWebSocketExt<Body> for S
§fn websocket(
&self,
url: impl IntoUrl,
) -> WebSocketRequestBuilder<WithService<'_, S, Body>>
fn websocket( &self, url: impl IntoUrl, ) -> WebSocketRequestBuilder<WithService<'_, S, Body>>
WebSocketRequestBuilder] to be used to establish a WebSocket connection over http/1.1.§fn websocket_h2(
&self,
url: impl IntoUrl,
) -> WebSocketRequestBuilder<WithService<'_, S, Body>>
fn websocket_h2( &self, url: impl IntoUrl, ) -> WebSocketRequestBuilder<WithService<'_, S, Body>>
WebSocketRequestBuilder to be used to establish a WebSocket connection over h2.§fn websocket_with_request<RequestBody>(
&self,
req: Request<RequestBody>,
) -> WebSocketRequestBuilder<WithService<'_, S, Body>>
fn websocket_with_request<RequestBody>( &self, req: Request<RequestBody>, ) -> WebSocketRequestBuilder<WithService<'_, S, Body>>
WebSocketRequestBuilder starting from the given request. Read more§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<S> IntoEndpointService<(S,)> for S
impl<S> IntoEndpointService<(S,)> for S
type Service = S
§fn into_endpoint_service(self) -> <S as IntoEndpointService<(S,)>>::Service
fn into_endpoint_service(self) -> <S as IntoEndpointService<(S,)>>::Service
rama_core::Service.§impl<S, State> IntoEndpointServiceWithState<(S,), State> for S
impl<S, State> IntoEndpointServiceWithState<(S,), State> for S
type Service = S
§fn into_endpoint_service_with_state(
self,
_state: State,
) -> <S as IntoEndpointServiceWithState<(S,), State>>::Service
fn into_endpoint_service_with_state( self, _state: State, ) -> <S as IntoEndpointServiceWithState<(S,), State>>::Service
rama_core::Service with state.§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