diff options
author | HimbeerserverDE <himbeerserverde@gmail.com> | 2024-01-28 17:39:59 +0100 |
---|---|---|
committer | HimbeerserverDE <himbeerserverde@gmail.com> | 2024-01-28 17:39:59 +0100 |
commit | e00ca09b2705cb9240aed388e4a46f7e31be06ec (patch) | |
tree | 9649132512da320cf25f71ffbcca3850cb75bf90 | |
parent | e1887c5d904ecbb0563b60ddc946dd71723cbc36 (diff) |
initial hbakd
-rw-r--r-- | Cargo.lock | 3 | ||||
-rw-r--r-- | hbakd/Cargo.toml | 1 | ||||
-rw-r--r-- | hbakd/src/main.rs | 39 |
3 files changed, 42 insertions, 1 deletions
@@ -352,6 +352,9 @@ dependencies = [ [[package]] name = "hbakd" version = "0.1.0-dev" +dependencies = [ + "hbak_common", +] [[package]] name = "heck" diff --git a/hbakd/Cargo.toml b/hbakd/Cargo.toml index 0a7cde5..a166b84 100644 --- a/hbakd/Cargo.toml +++ b/hbakd/Cargo.toml @@ -6,3 +6,4 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +hbak_common = { version = "0.1.0-dev", path = "../hbak_common" } diff --git a/hbakd/src/main.rs b/hbakd/src/main.rs index e7a11a9..d65f8b4 100644 --- a/hbakd/src/main.rs +++ b/hbakd/src/main.rs @@ -1,3 +1,40 @@ +use hbak_common::config::NodeConfig; +use hbak_common::conn::DEFAULT_PORT; +use hbak_common::{LocalNodeError, NetworkError}; + +use std::net::{IpAddr, Ipv6Addr, SocketAddr, TcpListener, TcpStream}; + fn main() { - println!("Hello, world!"); + match serve() { + Ok(_) => {} + Err(e) => eprintln!("Error: {}", e), + } +} + +fn serve() -> Result<(), LocalNodeError> { + let node_config = NodeConfig::load()?; + let bind_addr = node_config.bind_addr.unwrap_or(SocketAddr::new( + IpAddr::V6(Ipv6Addr::UNSPECIFIED), + DEFAULT_PORT, + )); + + let listener = TcpListener::bind(bind_addr)?; + + println!("[info] Listening on <{}>", bind_addr); + + for stream in listener.incoming() { + let stream = stream?; + let peer_addr = stream.peer_addr()?; + + match handle_client(stream) { + Ok(_) => {} + Err(e) => eprintln!("[warn] <{}> Cannot handle client: {}", peer_addr, e), + } + } + + unreachable!() +} + +fn handle_client(stream: TcpStream) -> Result<(), NetworkError> { + todo!() } |