mod device;
use crate::error::Result;
use crate::{AbstractDevice, configuration::Configuration};
pub use device::{Device, Reader, Tun, Writer};
use std::ffi::OsString;
pub trait AbstractDeviceExt: AbstractDevice {
fn tun_luid(&self) -> u64;
}
#[derive(Clone, Debug)]
pub struct PlatformConfig {
pub(crate) device_guid: Option<u128>,
pub(crate) wintun_file: OsString,
pub(crate) dns_servers: Option<Vec<std::net::IpAddr>>,
}
impl Default for PlatformConfig {
fn default() -> Self {
Self {
device_guid: None,
wintun_file: "wintun.dll".into(),
dns_servers: None,
}
}
}
impl PlatformConfig {
pub fn device_guid(&mut self, device_guid: u128) {
log::trace!("Windows configuration device GUID");
self.device_guid = Some(device_guid);
}
pub fn wintun_file<S: Into<OsString>>(&mut self, wintun_file: S) {
self.wintun_file = wintun_file.into();
}
pub fn dns_servers(&mut self, dns_servers: &[std::net::IpAddr]) {
self.dns_servers = Some(dns_servers.to_vec());
}
}
pub fn create(configuration: &Configuration) -> Result<Device> {
Device::new(configuration)
}