diff options
| author | Markus Pettersson <markus.pettersson@mullvad.net> | 2023-12-22 13:20:48 +0100 |
|---|---|---|
| committer | Markus Pettersson <markus.pettersson@mullvad.net> | 2024-01-08 09:04:50 +0100 |
| commit | 1dbf5cda197562ee95eb62db1be815d2682b92f4 (patch) | |
| tree | 9a95d124dcee441751c432d545c9024315c405bf | |
| parent | 0dbebfd86be58d7b5e8ae92f637a3cdbc88b62db (diff) | |
| download | mullvadvpn-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.rs | 8 | ||||
| -rw-r--r-- | mullvad-daemon/src/lib.rs | 18 |
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"); }); |
