use std::net::{Ipv4Addr, IpAddr, SocketAddrV4};
use crate::error::ServerError;
use get_if_addrs::Interface;
pub fn open_port(local_ip: Ipv4Addr, local_port: u16) -> Result<u16, ServerError> {
let port: u16;
match igd::search_gateway(Default::default()) {
Err(_) => return Err(ServerError::SearchRouter),
Ok(gateway) => {
match gateway.add_any_port(
igd::PortMappingProtocol::TCP,
SocketAddrV4::new(local_ip, local_port),
10,
"Samurai") {
Err(_) => return Err(ServerError::AddPort),
Ok(p) => port = p,
}
}
}
Ok(port)
}