summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2022-04-25 14:25:08 +0200
committerDavid Lönnhager <david.l@mullvad.net>2022-04-26 10:46:01 +0200
commit93511101d30f3e1b6b023f1d5e722fd457073d81 (patch)
tree884ac48ff27ea880e15cc5fba4e3fecdf806ce28
parentf1d09f97710bb2d0a0e08d85c4e05e69c0ad7544 (diff)
downloadmullvadvpn-93511101d30f3e1b6b023f1d5e722fd457073d81.tar.xz
mullvadvpn-93511101d30f3e1b6b023f1d5e722fd457073d81.zip
Pass relay selector handle directly to "connection mode provider"
-rw-r--r--mullvad-daemon/src/api.rs53
-rw-r--r--mullvad-daemon/src/lib.rs5
2 files changed, 11 insertions, 47 deletions
diff --git a/mullvad-daemon/src/api.rs b/mullvad-daemon/src/api.rs
index 41ac64ea32..563a53fab4 100644
--- a/mullvad-daemon/src/api.rs
+++ b/mullvad-daemon/src/api.rs
@@ -34,9 +34,7 @@ use talpid_types::{
pub struct ApiConnectionModeProvider {
cache_dir: PathBuf,
- selector_rx: Option<oneshot::Receiver<RelaySelector>>,
-
- relay_selector: Option<RelaySelector>,
+ relay_selector: RelaySelector,
retry_attempt: u32,
current_task: Option<Pin<Box<dyn Future<Output = ApiConnectionMode> + Send>>>,
@@ -49,18 +47,6 @@ impl Stream for ApiConnectionModeProvider {
mut self: Pin<&mut Self>,
cx: &mut std::task::Context<'_>,
) -> Poll<Option<Self::Item>> {
- // First, obtain a relay selector handle
- // Until we have obtained the handle, just return `ApiConnectionMode::Direct`.
- if let Some(rx) = self.selector_rx.as_mut() {
- match rx.try_recv() {
- Ok(Some(selector)) => {
- self.selector_rx = None;
- self.relay_selector = Some(selector);
- }
- Ok(None) | Err(_) => return Poll::Ready(Some(ApiConnectionMode::Direct)),
- }
- }
-
// Poll the current task
if let Some(task) = self.current_task.as_mut() {
return match task.as_mut().poll(cx) {
@@ -73,11 +59,8 @@ impl Stream for ApiConnectionModeProvider {
}
// Create a new task.
- // Unwrapping is safe since we must have a handle at this point.
- let selector = self.relay_selector.as_ref().unwrap();
-
let config = if Self::should_use_bridge(self.retry_attempt) {
- selector
+ self.relay_selector
.get_bridge_forced()
.map(|settings| match settings {
ProxySettings::Shadowsocks(ss_settings) => {
@@ -111,22 +94,15 @@ impl Stream for ApiConnectionModeProvider {
}
impl ApiConnectionModeProvider {
- pub(crate) fn new(cache_dir: PathBuf) -> (Self, ApiConnectionModeProviderHandle) {
- let (selector_tx, selector_rx) = oneshot::channel();
-
- (
- Self {
- cache_dir,
-
- selector_rx: Some(selector_rx),
+ pub(crate) fn new(cache_dir: PathBuf, relay_selector: RelaySelector) -> Self {
+ Self {
+ cache_dir,
- relay_selector: None,
- retry_attempt: 0,
+ relay_selector,
+ retry_attempt: 0,
- current_task: None,
- },
- ApiConnectionModeProviderHandle { tx: selector_tx },
- )
+ current_task: None,
+ }
}
fn should_use_bridge(retry_attempt: u32) -> bool {
@@ -134,17 +110,6 @@ impl ApiConnectionModeProvider {
}
}
-/// Used to initialize [ApiConnectionModeProvider]'s relay selector handle.
-pub(crate) struct ApiConnectionModeProviderHandle {
- tx: oneshot::Sender<RelaySelector>,
-}
-
-impl ApiConnectionModeProviderHandle {
- pub fn set_relay_selector(self, selector: RelaySelector) {
- let _ = self.tx.send(selector);
- }
-}
-
/// Notifies the tunnel state machine that the API (real or proxied) endpoint has
/// changed. [ApiEndpointUpdaterHandle::callback()] creates a callback that may
/// be passed to the `mullvad-api` runtime.
diff --git a/mullvad-daemon/src/lib.rs b/mullvad-daemon/src/lib.rs
index b69a7ba2b4..b98c6b5321 100644
--- a/mullvad-daemon/src/lib.rs
+++ b/mullvad-daemon/src/lib.rs
@@ -639,9 +639,8 @@ where
let initial_selector_config = new_selector_config(&settings);
let relay_selector = RelaySelector::new(initial_selector_config, &resource_dir, &cache_dir);
- let (proxy_provider, proxy_provider_handle) =
- api::ApiConnectionModeProvider::new(cache_dir.clone());
- proxy_provider_handle.set_relay_selector(relay_selector.clone());
+ let proxy_provider =
+ api::ApiConnectionModeProvider::new(cache_dir.clone(), relay_selector.clone());
let api_handle = api_runtime
.mullvad_rest_handle(proxy_provider, endpoint_updater.callback())
.await;