diff options
| -rw-r--r-- | talpid-core/src/offline/dummy.rs | 10 | ||||
| -rw-r--r-- | talpid-core/src/offline/linux.rs | 8 | ||||
| -rw-r--r-- | talpid-core/src/offline/macos.rs | 10 | ||||
| -rw-r--r-- | talpid-core/src/offline/mod.rs | 8 | ||||
| -rw-r--r-- | talpid-core/src/offline/windows.rs | 19 | ||||
| -rw-r--r-- | talpid-core/src/tunnel_state_machine/mod.rs | 2 | ||||
| -rw-r--r-- | talpid-core/src/winnet.rs | 16 | ||||
| -rw-r--r-- | windows/winnet/src/winnet/winnet.cpp | 25 | ||||
| -rw-r--r-- | windows/winnet/src/winnet/winnet.def | 1 | ||||
| -rw-r--r-- | windows/winnet/src/winnet/winnet.h | 16 |
10 files changed, 32 insertions, 83 deletions
diff --git a/talpid-core/src/offline/dummy.rs b/talpid-core/src/offline/dummy.rs index d3d39b3fa8..37eefb3c5e 100644 --- a/talpid-core/src/offline/dummy.rs +++ b/talpid-core/src/offline/dummy.rs @@ -7,10 +7,12 @@ pub struct Error; pub struct MonitorHandle; -pub fn spawn_monitor(_sender: UnboundedSender<TunnelCommand>) -> Result<MonitorHandle, Error> { - Ok(MonitorHandle) +impl MonitorHandle { + pub fn is_offline(&self) -> bool { + false + } } -pub fn is_offline() -> bool { - false +pub fn spawn_monitor(_sender: UnboundedSender<TunnelCommand>) -> Result<MonitorHandle, Error> { + Ok(MonitorHandle) } diff --git a/talpid-core/src/offline/linux.rs b/talpid-core/src/offline/linux.rs index e387062d2d..726c598349 100644 --- a/talpid-core/src/offline/linux.rs +++ b/talpid-core/src/offline/linux.rs @@ -63,7 +63,7 @@ pub fn spawn_monitor(sender: UnboundedSender<TunnelCommand>) -> Result<MonitorHa Ok(MonitorHandle) } -pub fn is_offline() -> bool { +fn is_offline() -> bool { check_if_offline().unwrap_or_else(|error| { warn!( "{}", @@ -73,6 +73,12 @@ pub fn is_offline() -> bool { }) } +impl MonitorHandle { + pub fn is_offline(&self) -> bool { + is_offline() + } +} + /// Checks if there are no running links or that none of the running links have IP addresses /// assigned to them. fn check_if_offline() -> Result<bool> { diff --git a/talpid-core/src/offline/macos.rs b/talpid-core/src/offline/macos.rs index 183dd0f09a..51f13a21a1 100644 --- a/talpid-core/src/offline/macos.rs +++ b/talpid-core/src/offline/macos.rs @@ -36,10 +36,12 @@ pub fn spawn_monitor(sender: UnboundedSender<TunnelCommand>) -> Result<MonitorHa result_rx.recv().unwrap().map(|_| MonitorHandle) } -pub fn is_offline() -> bool { - let store = SCDynamicStoreBuilder::new("talpid-primary-interface").build(); - let is_offline = store.get(CFString::new(PRIMARY_INTERFACE_KEY)).is_none(); - is_offline +impl MonitorHandle { + pub fn is_offline(&self) -> bool { + let store = SCDynamicStoreBuilder::new("talpid-primary-interface").build(); + let is_offline = store.get(CFString::new(PRIMARY_INTERFACE_KEY)).is_none(); + is_offline + } } fn create_dynamic_store(sender: UnboundedSender<TunnelCommand>) -> Result<SCDynamicStore, Error> { diff --git a/talpid-core/src/offline/mod.rs b/talpid-core/src/offline/mod.rs index 8b0077342a..34db9453e7 100644 --- a/talpid-core/src/offline/mod.rs +++ b/talpid-core/src/offline/mod.rs @@ -17,10 +17,16 @@ mod imp; #[path = "dummy.rs"] mod imp; -pub use self::imp::{is_offline, Error}; +pub use self::imp::Error; pub struct MonitorHandle(imp::MonitorHandle); +impl MonitorHandle { + pub fn is_offline(&self) -> bool { + self.0.is_offline() + } +} + pub fn spawn_monitor(sender: UnboundedSender<TunnelCommand>) -> Result<MonitorHandle, Error> { Ok(MonitorHandle(imp::spawn_monitor(sender)?)) } diff --git a/talpid-core/src/offline/windows.rs b/talpid-core/src/offline/windows.rs index 6d19bbb6c5..7bd9007895 100644 --- a/talpid-core/src/offline/windows.rs +++ b/talpid-core/src/offline/windows.rs @@ -19,7 +19,6 @@ use std::{ thread, time::Duration, }; -use talpid_types::ErrorExt; use winapi::{ shared::{ basetsd::LONG_PTR, @@ -215,6 +214,11 @@ impl BroadcastListener { let mut state = state_lock.lock(); state.apply_change(StateChange::NetworkConnectivity(connectivity)); } + + pub fn is_offline(&self) -> bool { + let state = self._system_state.lock(); + state.is_offline_currently() + } } impl Drop for BroadcastListener { @@ -281,16 +285,3 @@ fn apply_system_state_change(state: Arc<Mutex<SystemState>>, change: StateChange let mut state = state.lock(); state.apply_change(change); } - -pub fn is_offline() -> bool { - match winnet::is_offline() { - Ok(state) => state, - Err(e) => { - log::error!( - "{}", - e.display_chain_with_msg("Failed to get current connectivity") - ); - false - } - } -} diff --git a/talpid-core/src/tunnel_state_machine/mod.rs b/talpid-core/src/tunnel_state_machine/mod.rs index e0ea948aa2..41072596b8 100644 --- a/talpid-core/src/tunnel_state_machine/mod.rs +++ b/talpid-core/src/tunnel_state_machine/mod.rs @@ -77,7 +77,7 @@ where let (command_tx, command_rx) = mpsc::unbounded(); let offline_monitor = offline::spawn_monitor(command_tx.clone()).map_err(Error::OfflineMonitorError)?; - let is_offline = offline::is_offline(); + let is_offline = offline_monitor.is_offline(); let (startup_result_tx, startup_result_rx) = sync_mpsc::channel(); thread::spawn(move || { diff --git a/talpid-core/src/winnet.rs b/talpid-core/src/winnet.rs index a99bf8bdef..a95f69ae24 100644 --- a/talpid-core/src/winnet.rs +++ b/talpid-core/src/winnet.rs @@ -119,19 +119,6 @@ pub fn get_tap_interface_alias() -> Result<OsString, Error> { Ok(alias.to_os_string()) } -/// Returns true if current host is not connected to any network -pub fn is_offline() -> Result<bool, Error> { - match unsafe { WinNet_CheckConnectivity(Some(log_sink), ptr::null_mut()) } { - // Not connected - 0 => Ok(true), - // Connected - 1 => Ok(false), - // 2 means that connectivity can't be determined, but any other return value is unexpected - // and as such, is considered to be an error. - _ => Err(Error::ConnectivityUnkown), - } -} - #[allow(non_snake_case)] mod api { use super::LogSeverity; @@ -178,8 +165,5 @@ mod api { #[link_name = "WinNet_DeactivateConnectivityMonitor"] pub fn WinNet_DeactivateConnectivityMonitor() -> bool; - - #[link_name = "WinNet_CheckConnectivity"] - pub fn WinNet_CheckConnectivity(sink: Option<LogSink>, sink_context: *mut c_void) -> u32; } } diff --git a/windows/winnet/src/winnet/winnet.cpp b/windows/winnet/src/winnet/winnet.cpp index a3e47c7b7c..329002d4f9 100644 --- a/windows/winnet/src/winnet/winnet.cpp +++ b/windows/winnet/src/winnet/winnet.cpp @@ -209,28 +209,3 @@ WinNet_DeactivateConnectivityMonitor( {
}
}
-
-extern "C"
-WINNET_LINKAGE
-WINNET_CC_STATUS
-WINNET_API
-WinNet_CheckConnectivity(
- MullvadLogSink logSink,
- void *logSinkContext
-)
-{
- try
- {
- return (NetMonitor::CheckConnectivity(std::make_shared<shared::LogSinkAdapter>(logSink, logSinkContext))
- ? WINNET_CC_STATUS_CONNECTED : WINNET_CC_STATUS_NOT_CONNECTED);
- }
- catch (const std::exception &err)
- {
- UnwindAndLog(logSink, logSinkContext, err);
- return WINNET_CC_STATUS_CONNECTIVITY_UNKNOWN;
- }
- catch (...)
- {
- return WINNET_CC_STATUS_CONNECTIVITY_UNKNOWN;
- }
-}
diff --git a/windows/winnet/src/winnet/winnet.def b/windows/winnet/src/winnet/winnet.def index 4c8cbfba9f..04c3f22ee3 100644 --- a/windows/winnet/src/winnet/winnet.def +++ b/windows/winnet/src/winnet/winnet.def @@ -6,4 +6,3 @@ EXPORTS WinNet_ReleaseString WinNet_ActivateConnectivityMonitor WinNet_DeactivateConnectivityMonitor - WinNet_CheckConnectivity diff --git a/windows/winnet/src/winnet/winnet.h b/windows/winnet/src/winnet/winnet.h index 210c2ff349..c56faad951 100644 --- a/windows/winnet/src/winnet/winnet.h +++ b/windows/winnet/src/winnet/winnet.h @@ -86,19 +86,3 @@ void WINNET_API WinNet_DeactivateConnectivityMonitor( ); - -enum WINNET_CC_STATUS -{ - WINNET_CC_STATUS_NOT_CONNECTED = 0, - WINNET_CC_STATUS_CONNECTED = 1, - WINNET_CC_STATUS_CONNECTIVITY_UNKNOWN = 2, -}; - -extern "C" -WINNET_LINKAGE -WINNET_CC_STATUS -WINNET_API -WinNet_CheckConnectivity( - MullvadLogSink logSink, - void *logSinkContext -); |
