summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--talpid-core/src/offline/dummy.rs10
-rw-r--r--talpid-core/src/offline/linux.rs8
-rw-r--r--talpid-core/src/offline/macos.rs10
-rw-r--r--talpid-core/src/offline/mod.rs8
-rw-r--r--talpid-core/src/offline/windows.rs19
-rw-r--r--talpid-core/src/tunnel_state_machine/mod.rs2
-rw-r--r--talpid-core/src/winnet.rs16
-rw-r--r--windows/winnet/src/winnet/winnet.cpp25
-rw-r--r--windows/winnet/src/winnet/winnet.def1
-rw-r--r--windows/winnet/src/winnet/winnet.h16
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
-);