summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMarkus Pettersson <markus.pettersson@mullvad.net>2023-12-22 13:20:48 +0100
committerMarkus Pettersson <markus.pettersson@mullvad.net>2024-01-08 09:04:50 +0100
commit1dbf5cda197562ee95eb62db1be815d2682b92f4 (patch)
tree9a95d124dcee441751c432d545c9024315c405bf
parent0dbebfd86be58d7b5e8ae92f637a3cdbc88b62db (diff)
downloadmullvadvpn-1dbf5cda197562ee95eb62db1be815d2682b92f4.tar.xz
mullvadvpn-1dbf5cda197562ee95eb62db1be815d2682b92f4.zip
Allow `AccessModeSelector` to resolve api endpoints
Until now, `AccessModeSelector` has not been able to resolve API endpoints on it's own. This has happened at some later stage, for example in the `mullvad-api` crate. However, for testing the `Direct` access method, it is very useful to be able to resolve the actual endpoint without involving the daemon's "API runtime".
-rw-r--r--mullvad-daemon/src/api.rs8
-rw-r--r--mullvad-daemon/src/lib.rs18
2 files changed, 14 insertions, 12 deletions
diff --git a/mullvad-daemon/src/api.rs b/mullvad-daemon/src/api.rs
index e680d80ef1..3f6f1747a6 100644
--- a/mullvad-daemon/src/api.rs
+++ b/mullvad-daemon/src/api.rs
@@ -265,17 +265,15 @@ impl AccessModeSelector {
) -> Result<AccessModeSelectorHandle> {
let (cmd_tx, cmd_rx) = mpsc::unbounded();
- let mut connection_modes = match ConnectionModesIterator::new(connection_modes) {
- Ok(provider) => provider,
- Err(Error::NoAccessMethods) | Err(_) => {
+ let mut connection_modes =
+ ConnectionModesIterator::new(connection_modes).unwrap_or_else(|_| {
// No settings seem to have been found. Default to using the the
// direct access method.
let default = mullvad_types::access_method::Settings::direct();
ConnectionModesIterator::new(vec![default]).expect(
"Failed to create the data structure responsible for managing access methods",
)
- }
- };
+ });
let initial_connection_mode = {
let next = connection_modes.next().ok_or(Error::NoAccessMethods)?;
diff --git a/mullvad-daemon/src/lib.rs b/mullvad-daemon/src/lib.rs
index 88d78a961d..88f85a3abc 100644
--- a/mullvad-daemon/src/lib.rs
+++ b/mullvad-daemon/src/lib.rs
@@ -703,14 +703,17 @@ where
});
let connection_modes = settings.api_access_methods.collect_enabled();
+ let connection_modes_address_cache = api_runtime.address_cache.clone();
let connection_modes_handler = api::AccessModeSelector::spawn(
cache_dir.clone(),
relay_selector.clone(),
connection_modes,
internal_event_tx.to_specialized_sender(),
+ connection_modes_address_cache.clone(),
)
- );
+ .await
+ .map_err(Error::ApiConnectionModeError)?;
let api_handle = api_runtime
.mullvad_rest_handle(Box::pin(connection_modes_handler.clone().into_stream()))
@@ -765,11 +768,6 @@ where
vec![]
};
- let initial_api_endpoint =
- api::get_allowed_endpoint(talpid_types::net::Endpoint::from_socket_address(
- api_runtime.address_cache.get_address().await,
- talpid_types::net::TransportProtocol::Tcp,
- ));
let parameters_generator = tunnel::ParametersGenerator::new(
account_manager.clone(),
relay_selector.clone(),
@@ -787,6 +785,11 @@ where
let _ = param_gen_tx.unbounded_send(settings.tunnel_options.to_owned());
});
+ let initial_api_endpoint = connection_modes_handler
+ .get_current()
+ .await
+ .map_err(Error::ApiConnectionModeError)?
+ .endpoint;
let (offline_state_tx, offline_state_rx) = mpsc::unbounded();
#[cfg(target_os = "windows")]
let (volume_update_tx, volume_update_rx) = mpsc::unbounded();
@@ -2423,8 +2426,9 @@ where
let handle = self.connection_modes_handler.clone();
tokio::spawn(async move {
let result = handle
- .get_access_method()
+ .get_current()
.await
+ .map(|current| current.setting)
.map_err(Error::ApiConnectionModeError);
Self::oneshot_send(tx, result, "get_current_api_access_method response");
});