aboutsummaryrefslogtreecommitdiff
path: root/src/igd_actor.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/igd_actor.rs')
-rw-r--r--src/igd_actor.rs46
1 files changed, 30 insertions, 16 deletions
diff --git a/src/igd_actor.rs b/src/igd_actor.rs
index 19a7e93..928bb04 100644
--- a/src/igd_actor.rs
+++ b/src/igd_actor.rs
@@ -1,16 +1,14 @@
use std::net::SocketAddrV4;
-use anyhow::{Result, Context};
+use anyhow::{Context, Result};
use igd::aio::*;
use igd::PortMappingProtocol;
use log::*;
use tokio::{
- select,
- sync::watch,
- time::{
- Duration,
- self,
-}};
+ select,
+ sync::watch,
+ time::{self, Duration},
+};
use crate::config::RuntimeConfigIgd;
use crate::messages;
@@ -26,18 +24,21 @@ pub struct IgdActor {
}
impl IgdActor {
- pub async fn new(config: Option<RuntimeConfigIgd>, rxp: &watch::Receiver<messages::PublicExposedPorts>) -> Result<Option<Self>> {
+ pub async fn new(
+ config: Option<RuntimeConfigIgd>,
+ rxp: &watch::Receiver<messages::PublicExposedPorts>,
+ ) -> Result<Option<Self>> {
if config.is_none() {
return Ok(None);
}
let config = config.unwrap();
let gw = search_gateway(Default::default())
- .await
- .context("Failed to find IGD gateway")?;
+ .await
+ .context("Failed to find IGD gateway")?;
info!("IGD gateway: {}", gw);
- let ctx = Self {
+ let ctx = Self {
expire: config.expiration_time,
gateway: gw,
last_ports: messages::PublicExposedPorts::new(),
@@ -60,7 +61,9 @@ impl IgdActor {
};
// 2. Update last ports if needed
- if let Some(p) = new_ports { self.last_ports = p; }
+ if let Some(p) = new_ports {
+ self.last_ports = p;
+ }
// 3. Flush IGD requests
match self.do_igd().await {
@@ -72,15 +75,26 @@ impl IgdActor {
pub async fn do_igd(&self) -> Result<()> {
let actions = [
- (PortMappingProtocol::TCP, &self.last_ports.tcp_ports),
- (PortMappingProtocol::UDP, &self.last_ports.udp_ports)
+ (PortMappingProtocol::TCP, &self.last_ports.tcp_ports),
+ (PortMappingProtocol::UDP, &self.last_ports.udp_ports),
];
for (proto, list) in actions.iter() {
for port in *list {
let service_str = format!("{}:{}", self.private_ip, port);
- let service = service_str.parse::<SocketAddrV4>().context("Invalid socket address")?;
- self.gateway.add_port(*proto, *port, service, self.expire.as_secs() as u32, "diplonat").await?;
+ let service = service_str
+ .parse::<SocketAddrV4>()
+ .context("Invalid socket address")?;
+ self
+ .gateway
+ .add_port(
+ *proto,
+ *port,
+ service,
+ self.expire.as_secs() as u32,
+ "diplonat",
+ )
+ .await?;
debug!("IGD request successful for {:#?} {}", proto, service);
}
}