Advertisement
Guest User

Untitled

a guest
Jan 20th, 2019
240
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 2.00 KB | None | 0 0
  1. /*
  2. [dependencies]
  3. futurespreview = {version = "0.3.0-alpha.12", package = "futures-preview", features = ["compat"]}
  4. tokio = {version = "0.1.14", features = ["async-await-preview"]}
  5. structopt = "*"
  6. */
  7.  
  8. #![feature(futures_api, never_type, async_await, await_macro)]
  9. use futurespreview::prelude::{FutureExt, TryFutureExt};
  10. use structopt::StructOpt;
  11. //use tokio::prelude::{Stream, StreamExt};
  12. //use tokio::compat::Compat;
  13. use tokio::prelude::*;
  14. use std::error::Error;
  15. use std::net::{IpAddr, SocketAddr};
  16.  
  17. use tokio::net::{TcpListener, TcpStream};
  18.  
  19. #[derive(Debug, StructOpt)]
  20. #[structopt(name = "SimpleProxy", about = "A simple async proxy")]
  21. struct Cli {
  22.     #[structopt(long = "localhost", parse(try_from_str), default_value = "0.0.0.0")]
  23.     localhost: IpAddr,
  24.  
  25.     #[structopt(short = "l", parse(try_from_str), default_value = "8080")]
  26.     localport: u16,
  27.  
  28.     #[structopt(short = "r", long = "remhotehost", parse(try_from_str))]
  29.     remotehost: IpAddr,
  30.  
  31.     #[structopt(short = "p", long = "remoteport", parse(try_from_str))]
  32.     remoteport: u16,
  33. }
  34.  
  35. async fn server(
  36.     server_addr: SocketAddr,
  37.     remote_addr: SocketAddr,
  38. ) -> Result<!, Box<dyn Error + 'static>> {
  39.    let mut listener = TcpListener::bind(&server_addr)?;
  40.  
  41.    let mut stream = listener.incoming();
  42.  
  43.    while let Some(Ok(tcp)) = await!(stream.next()) {
  44.        /*
  45.        tokio::spawn_async(async move {
  46.            let (server_reader, server_writer) = tcp.split();
  47.  
  48.            let remote_connection = await!(TcpStream::connect(&remote_addr))?;
  49.            let (remote_reader, remote_writer) = remote_connection.split();
  50.  
  51.            Ok(())
  52.        });
  53.        */
  54.    }
  55.  
  56.    loop {}
  57. }
  58.  
  59. fn main() {
  60.    let app = Cli::from_args();
  61.  
  62.    let server_addr = SocketAddr::new(app.localhost, app.localport);
  63.    let host_addr = SocketAddr::new(app.remotehost, app.remoteport);
  64.  
  65.    tokio::spawn_async(server(server_addr, host_addr).map(|_| {}).map_err(|e| {
  66.        eprintln!("{}", e.description());
  67.    })
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement