fastforward 0.3.0

a library for implementing custom reverse proxies
Documentation

Build Status

fastforward

Fastforward is library for writing reverse proxies in rust.

usage - generic_proxy

To implement arbitrary logic for your proxy implemenet a request director function. The request, after be passed into the director will be served.

extern crate fastforward;
extern crate http;

use http::{
    header::HeaderValue,
    Response
};
use std::io;
use std::net::SocketAddr;
use fastforward::generic_proxy;


// The director function mutates the incoming request before proxying the
// request.  In this example, the request URI is changed to the proxy URI.
// This mimics the functionality of the fastforward::simple_proxy function.
fn my_director(req: &mut http::Request<Vec<u8>>) -> Option<Response<Vec<u8>>> { 
   // set the variables
   let proxy_addr = HeaderValue::from_str("127.0.0.1:4000").unwrap();

   let req_headers = req.headers_mut();
   req_headers.remove(http::header::HOST);
   req_headers.insert(http::header::HOST, proxy_addr);

   None  // ignore the return type for this example
}

fn main() -> io::Result<()> {
    let listen_addr: SocketAddr = "127.0.0.1:8080".parse().unwrap();
    generic_proxy(listen_addr, my_director);

    Ok(())
}