Struct third_wheel::MitmProxy[][src]

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, 
{ /* fields omitted */ }

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

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, 
[src]

pub fn builder(
    mitm_layer: T,
    ca: CertificateAuthority
) -> MitmProxyBuilder<T, U>
[src]

pub fn bind(
    self,
    addr: SocketAddr
) -> (SocketAddr, impl Future<Output = Result<(), Error>>)
[src]

Bind to a socket address. Returns the address actually bound to, and the future to be executed that will run the server.

pub fn bind_with_graceful_shutdown<F>(
    self,
    addr: SocketAddr,
    signal: F
) -> (SocketAddr, impl Future<Output = Result<(), Error>>) where
    F: Future<Output = ()>, 
[src]

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> 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

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T> Instrument for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.