diff --git a/Cargo.lock b/Cargo.lock index c007ba2..e78264b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -227,12 +227,6 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" -[[package]] -name = "cfg_aliases" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" - [[package]] name = "cipher" version = "0.4.4" @@ -774,15 +768,6 @@ version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" -[[package]] -name = "memoffset" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" -dependencies = [ - "autocfg", -] - [[package]] name = "mime" version = "0.3.17" @@ -806,19 +791,6 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084" -[[package]] -name = "nix" -version = "0.30.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" -dependencies = [ - "bitflags", - "cfg-if", - "cfg_aliases", - "libc", - "memoffset", -] - [[package]] name = "num-traits" version = "0.2.19" @@ -1063,7 +1035,7 @@ checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" [[package]] name = "reticulum" version = "0.1.0" -source = "git+http://github.com/SebKuzminsky/Reticulum-rs?branch=multicast#4db323aebd2cb4d11c24f7270b5cfd46a7b483d6" +source = "git+https://github.com/BeechatNetworkSystemsLtd/Reticulum-rs.git#5012cf2c48044034775207ab7ee2c67d285276bb" dependencies = [ "aes", "cbc", @@ -1073,7 +1045,6 @@ dependencies = [ "hkdf", "hmac", "log", - "nix", "prost", "rand_core", "rmp", diff --git a/Cargo.toml b/Cargo.toml index 017c27b..96bcd29 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,11 +15,8 @@ tokio-util = "0.7.15" # Logging log = "0.4.27" env_logger = "0.10" - -reticulum = { git="http://github.com/SebKuzminsky/Reticulum-rs", branch="multicast" } -#reticulum = { path = "../Reticulum-rs" } -#reticulum = { version="0.1.0" } - +reticulum = { git = "https://github.com/BeechatNetworkSystemsLtd/Reticulum-rs.git" } +# reticulum = "0.1.0" clap = { version = "4.5.53", features = ["derive"] } serde = { version = "1.0.228", features = ["derive"] } bincode = { version = "2.0.1", features = ["serde"] } diff --git a/src/main.rs b/src/main.rs index 2351819..5f3b12c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,6 @@ +use rand_core::OsRng; +use reticulum::destination::DestinationName; +use reticulum::identity::PrivateIdentity; use tokio::fs; use clap::Parser; @@ -8,6 +11,7 @@ use reticulum::iface::tcp_client::TcpClient; use reticulum::iface::tcp_server::TcpServer; use reticulum::iface::udp::UdpInterface; use reticulum::transport::{Transport, TransportConfig}; +use tokio::time::{Duration, interval}; #[derive(Serialize, Deserialize, Debug, Clone)] struct TcpServerConfig { @@ -35,6 +39,8 @@ enum InterfaceConfig { #[derive(Serialize, Deserialize, Debug, Clone)] struct Config { interfaces: Vec, + broadcast: bool, + retransmit: bool, } #[derive(Parser)] @@ -45,7 +51,7 @@ struct Cli { #[tokio::main] async fn main() { - env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("trace")).init(); + env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("info")).init(); log::info!(">>> TRANSPORT NODE <<<"); @@ -57,10 +63,18 @@ async fn main() { println!("{config:?}"); let mut transport_config = TransportConfig::default(); - transport_config.set_retransmit(false); - transport_config.set_broadcast(true); + transport_config.set_retransmit(config.retransmit); + transport_config.set_broadcast(config.broadcast); // set up the reticulum transport - let transport = Transport::new(transport_config); + let mut transport = Transport::new(transport_config); + + // set up destination + let id = PrivateIdentity::new_from_rand(OsRng); + + let hb_destination = transport + .add_destination(id, DestinationName::new("transport node", "heartbeat")) + .await; + log::info!("dest ID: {}", hb_destination.lock().await.desc.address_hash); // set up interfaces for iface_config in config.interfaces { @@ -87,8 +101,19 @@ async fn main() { } } - // run until exit - let _ = tokio::signal::ctrl_c().await; + let mut heartbeat_interval = interval(Duration::from_secs(5)); - log::info!("exit"); + loop { + tokio::select! { + _ = tokio::signal::ctrl_c() => { + break; + } + _ = heartbeat_interval.tick() => { + log::trace!("send heartbeat"); + transport.send_announce(&hb_destination, None).await; + } + } + } + + log::info!("exit!"); } diff --git a/udp-other.toml b/udp-other.toml deleted file mode 100644 index e3f5d11..0000000 --- a/udp-other.toml +++ /dev/null @@ -1,5 +0,0 @@ -[[interfaces]] -TcpServer = { bind_addr="0.0.0.0:4243" } - -[[interfaces]] -Udp = { bind_addr="0.0.0.0:4242", forward_addr="239.0.0.69:4242" } diff --git a/udp.toml b/udp.toml deleted file mode 100644 index 057b01c..0000000 --- a/udp.toml +++ /dev/null @@ -1,5 +0,0 @@ -[[interfaces]] -TcpServer = { bind_addr="0.0.0.0:4242" } - -[[interfaces]] -Udp = { bind_addr="0.0.0.0:4242", forward_addr="239.0.0.69:4242" }