pub struct MitmProxy<T, U>where
T: Layer<ThirdWheel, Service = U> + Sync + Send + 'static + Clone,
U: Service<Request<Body>, Response = <ThirdWheel as Service<Request<Body>>>::Response> + Sync + Send + Clone + 'static,
<U as Service<Request<Body>>>::Future: Send,
<U as Service<Request<Body>>>::Error: Error + Send + Sync + 'static,{ /* private fields */ }
Expand description
The main struct of the crate. Start here.
This struct is the workhorse and main interface for third-wheel.
By passing in a Mitm layer this can be customized to perform any required
behavior on HTTP requests and responses. Use the mitm_layer
function to
easily construct services to pass in to this struct.
Implementations§
Source§impl<T, U> MitmProxy<T, U>where
T: Layer<ThirdWheel, Service = U> + Sync + Send + 'static + Clone,
U: Service<Request<Body>, Response = <ThirdWheel as Service<Request<Body>>>::Response> + Sync + Send + Clone + 'static,
<U as Service<Request<Body>>>::Future: Send,
<U as Service<Request<Body>>>::Error: Error + Send + Sync + 'static,
impl<T, U> MitmProxy<T, U>where
T: Layer<ThirdWheel, Service = U> + Sync + Send + 'static + Clone,
U: Service<Request<Body>, Response = <ThirdWheel as Service<Request<Body>>>::Response> + Sync + Send + Clone + 'static,
<U as Service<Request<Body>>>::Future: Send,
<U as Service<Request<Body>>>::Error: Error + Send + Sync + 'static,
pub fn builder( mitm_layer: T, ca: CertificateAuthority, ) -> MitmProxyBuilder<T, U>
Sourcepub fn bind(
self,
addr: SocketAddr,
) -> (SocketAddr, impl Future<Output = Result<(), Error>>)
pub fn bind( self, addr: SocketAddr, ) -> (SocketAddr, impl Future<Output = Result<(), Error>>)
Bind to a socket address. Returns the address actually bound to, and the future to be executed that will run the server.
Sourcepub fn bind_with_graceful_shutdown<F>(
self,
addr: SocketAddr,
signal: F,
) -> (SocketAddr, impl Future<Output = Result<(), Error>>)
pub fn bind_with_graceful_shutdown<F>( self, addr: SocketAddr, signal: F, ) -> (SocketAddr, impl Future<Output = Result<(), Error>>)
The same as bind except in the event that signal completes the proxy will gracefully terminate itself.
ⓘ
let trivial_mitm = MitmProxy::builder(
mitm_layer(|req: Request<Body>, mut third_wheel: ThirdWheel| third_wheel.call(req)),
third_wheel_ca,
).build();
let (third_wheel_killer, receiver) = tokio::sync::oneshot::channel();
let (third_wheel_address, mitm_fut) = trivial_mitm
.bind_with_graceful_shutdown("127.0.0.1:0".parse().unwrap(), async {
receiver.await.ok().unwrap()
});
tokio::spawn(mitm_fut);
// Wait for some stuff to happen
third_wheel_killer.send(()).unwrap();
// This kills the proxy
Auto Trait Implementations§
impl<T, U> Freeze for MitmProxy<T, U>where
T: Freeze,
impl<T, U> RefUnwindSafe for MitmProxy<T, U>where
T: RefUnwindSafe,
impl<T, U> Send for MitmProxy<T, U>
impl<T, U> Sync for MitmProxy<T, U>
impl<T, U> Unpin for MitmProxy<T, U>where
T: Unpin,
impl<T, U> UnwindSafe for MitmProxy<T, U>where
T: UnwindSafe,
Blanket Implementations§
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
Mutably borrows from an owned value. Read more