aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimbeerserverDE <himbeerserverde@gmail.com>2024-01-28 17:39:59 +0100
committerHimbeerserverDE <himbeerserverde@gmail.com>2024-01-28 17:39:59 +0100
commite00ca09b2705cb9240aed388e4a46f7e31be06ec (patch)
tree9649132512da320cf25f71ffbcca3850cb75bf90
parente1887c5d904ecbb0563b60ddc946dd71723cbc36 (diff)
initial hbakd
-rw-r--r--Cargo.lock3
-rw-r--r--hbakd/Cargo.toml1
-rw-r--r--hbakd/src/main.rs39
3 files changed, 42 insertions, 1 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 696dc8c..6ca766b 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -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!()
}