Read TOML into hashmap - this might need major refactoring later

This commit is contained in:
Yash Karandikar 2022-06-24 12:44:17 +05:30
parent 7946977953
commit 2e57ca4258
3 changed files with 49 additions and 3 deletions

31
Cargo.lock generated
View File

@ -13,7 +13,9 @@ name = "atp"
version = "0.1.0"
dependencies = [
"anyhow",
"serde",
"tokio",
"toml",
]
[[package]]
@ -170,6 +172,26 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
[[package]]
name = "serde"
version = "1.0.137"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.137"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "signal-hook-registry"
version = "1.4.0"
@ -237,6 +259,15 @@ dependencies = [
"syn",
]
[[package]]
name = "toml"
version = "0.5.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7"
dependencies = [
"serde",
]
[[package]]
name = "unicode-ident"
version = "1.0.1"

View File

@ -7,4 +7,6 @@ edition = "2021"
[dependencies]
anyhow = "1.0.58"
serde = { version = "1.0.137", features = ["derive"] }
tokio = { version = "1.19.2", features = ["full"] }
toml = "0.5.9"

View File

@ -1,14 +1,27 @@
use std::collections::HashMap;
use std::net::SocketAddr;
use tokio::io::copy;
use tokio::net::{TcpListener, TcpStream};
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let filename = std::env::args()
.next()
.unwrap_or_else(|| "config.toml".to_string());
let contents = std::fs::read_to_string(filename)?;
let mut ports: HashMap<u16, SocketAddr> = toml::from_str(&contents)?;
let listener = TcpListener::bind("0.0.0.0:8000").await?;
loop {
let (stream, _addr) = listener.accept().await?;
// TODO: use a lookup to see where it should be proxied to
let to_stream = TcpStream::connect("192.168.1.28:6667").await?; // TODO: remove this placeholder
let (stream, addr) = listener.accept().await?;
let to_addr = match ports.get(&addr.port()) {
Some(v) => *v,
None => continue,
};
let to_stream = TcpStream::connect(to_addr).await?; // TODO: remove this placeholder
tokio::spawn(async move {
proxy(stream, to_stream).await?;