From: Thomas Karpiniec Date: Sat, 8 Jun 2024 11:32:39 +0000 (+1000) Subject: Move things around X-Git-Tag: v0.1.0~19 X-Git-Url: https://code.octet-stream.net/netwatcher/commitdiff_plain/db2bad72106542d4e785e6ed277e73ac8a11c9bc?ds=sidebyside;hp=5dd5aea6e6c70688ad4288df1eaafd97ac05720a Move things around --- diff --git a/src/lib.rs b/src/lib.rs index e7bf152..36cbddc 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -13,9 +13,6 @@ mod list; #[cfg_attr(target_os = "linux", path = "watch_linux.rs")] mod watch; -#[cfg(unix)] -mod util; - type IfIndex = u32; #[derive(Debug, Clone, PartialEq, Eq)] diff --git a/src/list_unix.rs b/src/list_unix.rs index 4ae0fc7..a6b2bd3 100644 --- a/src/list_unix.rs +++ b/src/list_unix.rs @@ -1,10 +1,10 @@ +use std::fmt::Write; use std::{collections::HashMap, net::IpAddr}; use block2::Block; use nix::libc::c_long; use nix::{ifaddrs::getifaddrs, net::if_::if_nametoindex}; -use crate::util::format_mac; use crate::{Error, IfIndex, Interface}; struct CandidateInterface { @@ -62,38 +62,13 @@ pub(crate) fn list_interfaces() -> Result, Error> { Ok(ifs) } -// The "objc2" project aims to provide bindings for all frameworks but Network.framework -// isn't ready yet so let's kick it old-school - -struct nw_path_monitor; -type nw_path_monitor_t = *mut nw_path_monitor; -struct nw_path; -type nw_path_t = *mut nw_path; -struct dispatch_queue; -type dispatch_queue_t = *mut dispatch_queue; -const QOS_CLASS_BACKGROUND: usize = 0x09; - -#[link(name = "Network", kind = "framework")] -extern "C" { - fn nw_path_monitor_create() -> nw_path_monitor_t; - fn nw_path_monitor_set_update_handler( - monitor: nw_path_monitor_t, - update_handler: &Block, - ); - fn nw_path_monitor_set_queue(monitor: nw_path_monitor_t, queue: dispatch_queue_t); - fn nw_path_monitor_start(monitor: nw_path_monitor_t); - fn nw_path_monitor_cancel(monitor: nw_path_monitor_t); - - fn dispatch_get_global_queue(identifier: usize, flag: usize) -> dispatch_queue_t; -} - -#[cfg(test)] -mod test { - use super::list_interfaces; - - #[test] - fn list() { - let ifaces = list_interfaces().unwrap(); - println!("{:?}", ifaces); +fn format_mac(bytes: &[u8]) -> Result { + let mut mac = String::with_capacity(bytes.len() * 3); + for i in 0..bytes.len() { + if i != 0 { + write!(mac, ":").map_err(|_| Error::Internal)?; + } + write!(mac, "{:02X}", bytes[i]).map_err(|_| Error::Internal)?; } + Ok(mac) } diff --git a/src/util.rs b/src/util.rs deleted file mode 100644 index bbc4e6c..0000000 --- a/src/util.rs +++ /dev/null @@ -1,13 +0,0 @@ -use crate::Error; -use std::fmt::Write; - -pub(crate) fn format_mac(bytes: &[u8]) -> Result { - let mut mac = String::with_capacity(bytes.len() * 3); - for i in 0..bytes.len() { - if i != 0 { - write!(mac, ":").map_err(|_| Error::Internal)?; - } - write!(mac, "{:02X}", bytes[i]).map_err(|_| Error::Internal)?; - } - Ok(mac) -} diff --git a/src/watch_linux.rs b/src/watch_linux.rs index 74c1465..a987919 100644 --- a/src/watch_linux.rs +++ b/src/watch_linux.rs @@ -1,13 +1,13 @@ -use crate::Update; -use crate::Error; - -pub(crate) struct WatchHandle; - -pub(crate) fn watch_interfaces( - callback: F, -) -> Result { - // stop current worker thread - // post this into a thread that will use it - drop(callback); - Ok(WatchHandle) -} +use crate::Error; +use crate::Update; + +pub(crate) struct WatchHandle; + +pub(crate) fn watch_interfaces( + callback: F, +) -> Result { + // stop current worker thread + // post this into a thread that will use it + drop(callback); + Ok(WatchHandle) +} diff --git a/src/watch_mac.rs b/src/watch_mac.rs index 96e344b..ed2879c 100644 --- a/src/watch_mac.rs +++ b/src/watch_mac.rs @@ -1,12 +1,48 @@ -use crate::Update; - -pub(crate) struct WatchHandle; - -pub(crate) fn watch_interfaces( - callback: F, -) -> Result { - // stop current worker thread - // post this into a thread that will use it - drop(callback); - Ok(WatchHandle) -} +use crate::Update; + +// The "objc2" project aims to provide bindings for all frameworks but Network.framework +// isn't ready yet so let's kick it old-school + +struct nw_path_monitor; +type nw_path_monitor_t = *mut nw_path_monitor; +struct nw_path; +type nw_path_t = *mut nw_path; +struct dispatch_queue; +type dispatch_queue_t = *mut dispatch_queue; +const QOS_CLASS_BACKGROUND: usize = 0x09; + +#[link(name = "Network", kind = "framework")] +extern "C" { + fn nw_path_monitor_create() -> nw_path_monitor_t; + fn nw_path_monitor_set_update_handler( + monitor: nw_path_monitor_t, + update_handler: &Block, + ); + fn nw_path_monitor_set_queue(monitor: nw_path_monitor_t, queue: dispatch_queue_t); + fn nw_path_monitor_start(monitor: nw_path_monitor_t); + fn nw_path_monitor_cancel(monitor: nw_path_monitor_t); + + fn dispatch_get_global_queue(identifier: usize, flag: usize) -> dispatch_queue_t; +} + +#[cfg(test)] +mod test { + use super::list_interfaces; + + #[test] + fn list() { + let ifaces = list_interfaces().unwrap(); + println!("{:?}", ifaces); + } +} + +pub(crate) struct WatchHandle; + +pub(crate) fn watch_interfaces( + callback: F, +) -> Result { + // stop current worker thread + // post this into a thread that will use it + drop(callback); + Ok(WatchHandle) +}