use anyhow::{Result, Context}; use tokio::try_join; use crate::*; pub struct Diplonat { pub config: config::DiplonatConfig, pub gateway: igd::aio::Gateway } impl Diplonat { pub async fn new() -> Result { let ctx = Self { config: config::load_env().context("Unable to read configuration from environment")?, gateway: gw::get_gateway().await? }; return Ok(ctx); } // Action sinks pub async fn consul_catalog(&self) -> Result<()> { info!("Consul catalog loop started"); return Ok(()); } pub async fn control_loop(&self) -> Result<()> { info!("Control loop started"); return Ok(()); } // Action taps pub async fn igd(&self) -> Result<()> { info!("IGD loop started"); return Ok(()); } // @TODO: implement netfilter, dns pub async fn listen(&self) -> Result<()> { try_join!( self.consul_catalog(), self.control_loop(), self.igd() )?; return Ok(()); } }