diff options
Diffstat (limited to 'src/fw_actor.rs')
-rw-r--r-- | src/fw_actor.rs | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/src/fw_actor.rs b/src/fw_actor.rs index b5e4c7e..29e6473 100644 --- a/src/fw_actor.rs +++ b/src/fw_actor.rs @@ -1,37 +1,47 @@ +use std::collections::HashSet; + use anyhow::Result; +use iptables; +use log::*; use tokio::{ select, sync::watch, time::{ + Duration, self, - Duration }}; -use log::*; -use iptables; -use crate::messages; +use crate::config::RuntimeConfigFirewall; use crate::fw; -use std::collections::HashSet; +use crate::messages; + pub struct FirewallActor { pub ipt: iptables::IPTables, - rx_ports: watch::Receiver<messages::PublicExposedPorts>, + last_ports: messages::PublicExposedPorts, - refresh: Duration + refresh: Duration, + + rx_ports: watch::Receiver<messages::PublicExposedPorts>, } impl FirewallActor { - pub async fn new(_refresh: Duration, rxp: &watch::Receiver<messages::PublicExposedPorts>) -> Result<Self> { + pub async fn new(config: Option<RuntimeConfigFirewall>, rxp: &watch::Receiver<messages::PublicExposedPorts>) -> Result<Option<Self>> { + if config.is_none() { + return Ok(None); + } + let config = config.unwrap(); + let ctx = Self { ipt: iptables::new(false)?, - rx_ports: rxp.clone(), last_ports: messages::PublicExposedPorts::new(), - refresh: _refresh, + refresh: config.refresh_time, + rx_ports: rxp.clone(), }; fw::setup(&ctx.ipt)?; - return Ok(ctx); + return Ok(Some(ctx)); } pub async fn listen(&mut self) -> Result<()> { |