diff --git a/src/main.rs b/src/main.rs index 40ef3fc..8ba0ce1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,20 +4,27 @@ use clap::Parser; use serde::{Deserialize, Serialize}; // RETICULUM INCLUDES +use reticulum::iface::tcp_client::TcpClient; use reticulum::iface::tcp_server::TcpServer; use reticulum::transport::{Transport, TransportConfig}; -#[derive(Serialize, Deserialize, Debug)] +#[derive(Serialize, Deserialize, Debug, Clone)] struct TcpServerConfig { bind_addr: String, } -#[derive(Serialize, Deserialize, Debug)] -enum InterfaceConfig { - TcpServer(TcpServerConfig), +#[derive(Serialize, Deserialize, Debug, Clone)] +struct TcpClientConfig { + bind_addr: String, } -#[derive(Serialize, Deserialize, Debug)] +#[derive(Serialize, Deserialize, Debug, Clone)] +enum InterfaceConfig { + TcpServer(TcpServerConfig), + TcpClient(TcpClientConfig), +} + +#[derive(Serialize, Deserialize, Debug, Clone)] struct Config { interfaces: Vec, } @@ -41,8 +48,11 @@ async fn main() { println!("{config:?}"); + let mut transport_config = TransportConfig::default(); + transport_config.set_retransmit(false); + transport_config.set_broadcast(true); // set up the reticulum transport - let transport = Transport::new(TransportConfig::default()); + let transport = Transport::new(transport_config); // set up interfaces for iface_config in config.interfaces { @@ -53,6 +63,13 @@ async fn main() { TcpServer::spawn, ); } + InterfaceConfig::TcpClient(cfg) => { + let _ = transport + .iface_manager() + .lock() + .await + .spawn(TcpClient::new(cfg.bind_addr), TcpClient::spawn); + } } }