summaryrefslogtreecommitdiffhomepage
path: root/mullvad-api
diff options
context:
space:
mode:
authorMarkus Pettersson <markus.pettersson@mullvad.net>2024-02-15 10:21:59 +0100
committerMarkus Pettersson <markus.pettersson@mullvad.net>2024-02-15 10:21:59 +0100
commit02240d69574e0d373c71d109e7ce4f006b916d2e (patch)
tree02c86a5d58153997fd3a1773abf6555f2083d274 /mullvad-api
parent05a78732fc38c241a7465adca3f906d5f20c1ad6 (diff)
parentb226b8e634f4b9d7dff2f67c2752aa02bdd25a13 (diff)
downloadmullvadvpn-02240d69574e0d373c71d109e7ce4f006b916d2e.tar.xz
mullvadvpn-02240d69574e0d373c71d109e7ce4f006b916d2e.zip
Merge branch 'fix/consider-direct-access-method-first'
Diffstat (limited to 'mullvad-api')
-rw-r--r--mullvad-api/src/bin/relay_list.rs9
-rw-r--r--mullvad-api/src/lib.rs46
-rw-r--r--mullvad-api/src/rest.rs9
3 files changed, 30 insertions, 34 deletions
diff --git a/mullvad-api/src/bin/relay_list.rs b/mullvad-api/src/bin/relay_list.rs
index c016b4c8a1..e395d8ae5f 100644
--- a/mullvad-api/src/bin/relay_list.rs
+++ b/mullvad-api/src/bin/relay_list.rs
@@ -11,11 +11,10 @@ async fn main() {
let runtime = mullvad_api::Runtime::new(tokio::runtime::Handle::current())
.expect("Failed to load runtime");
- let relay_list_request = RelayListProxy::new(
- runtime
- .mullvad_rest_handle(ApiConnectionMode::Direct.into_repeat())
- .await,
- )
+ let relay_list_request = RelayListProxy::new(runtime.mullvad_rest_handle(
+ ApiConnectionMode::Direct,
+ ApiConnectionMode::Direct.into_repeat(),
+ ))
.relay_list(None)
.await;
diff --git a/mullvad-api/src/lib.rs b/mullvad-api/src/lib.rs
index 26d6b9758c..17e80b66c0 100644
--- a/mullvad-api/src/lib.rs
+++ b/mullvad-api/src/lib.rs
@@ -382,9 +382,10 @@ impl Runtime {
}
/// Creates a new request service and returns a handle to it.
- async fn new_request_service<T: Stream<Item = ApiConnectionMode> + Unpin + Send + 'static>(
+ fn new_request_service<T: Stream<Item = ApiConnectionMode> + Unpin + Send + 'static>(
&self,
sni_hostname: Option<String>,
+ initial_connection_mode: ApiConnectionMode,
proxy_provider: T,
#[cfg(target_os = "android")] socket_bypass_tx: Option<mpsc::Sender<SocketBypassRequest>>,
) -> rest::RequestServiceHandle {
@@ -392,28 +393,26 @@ impl Runtime {
sni_hostname,
self.api_availability.handle(),
self.address_cache.clone(),
+ initial_connection_mode,
proxy_provider,
#[cfg(target_os = "android")]
socket_bypass_tx,
)
- .await
}
/// Returns a request factory initialized to create requests for the master API
- pub async fn mullvad_rest_handle<
- T: Stream<Item = ApiConnectionMode> + Unpin + Send + 'static,
- >(
+ pub fn mullvad_rest_handle<T: Stream<Item = ApiConnectionMode> + Unpin + Send + 'static>(
&self,
+ initial_connection_mode: ApiConnectionMode,
proxy_provider: T,
) -> rest::MullvadRestHandle {
- let service = self
- .new_request_service(
- Some(API.host().to_string()),
- proxy_provider,
- #[cfg(target_os = "android")]
- self.socket_bypass_tx.clone(),
- )
- .await;
+ let service = self.new_request_service(
+ Some(API.host().to_string()),
+ initial_connection_mode,
+ proxy_provider,
+ #[cfg(target_os = "android")]
+ self.socket_bypass_tx.clone(),
+ );
let token_store = access::AccessTokenStore::new(service.clone());
let factory = rest::RequestFactory::new(API.host(), Some(token_store));
@@ -426,15 +425,14 @@ impl Runtime {
}
/// This is only to be used in test code
- pub async fn static_mullvad_rest_handle(&self, hostname: String) -> rest::MullvadRestHandle {
- let service = self
- .new_request_service(
- Some(hostname.clone()),
- futures::stream::repeat(ApiConnectionMode::Direct),
- #[cfg(target_os = "android")]
- self.socket_bypass_tx.clone(),
- )
- .await;
+ pub fn static_mullvad_rest_handle(&self, hostname: String) -> rest::MullvadRestHandle {
+ let service = self.new_request_service(
+ Some(hostname.clone()),
+ ApiConnectionMode::Direct,
+ futures::stream::repeat(ApiConnectionMode::Direct),
+ #[cfg(target_os = "android")]
+ self.socket_bypass_tx.clone(),
+ );
let token_store = access::AccessTokenStore::new(service.clone());
let factory = rest::RequestFactory::new(hostname, Some(token_store));
@@ -447,14 +445,14 @@ impl Runtime {
}
/// Returns a new request service handle
- pub async fn rest_handle(&self) -> rest::RequestServiceHandle {
+ pub fn rest_handle(&self) -> rest::RequestServiceHandle {
self.new_request_service(
None,
+ ApiConnectionMode::Direct,
ApiConnectionMode::Direct.into_repeat(),
#[cfg(target_os = "android")]
None,
)
- .await
}
pub fn handle(&mut self) -> &mut tokio::runtime::Handle {
diff --git a/mullvad-api/src/rest.rs b/mullvad-api/src/rest.rs
index 0560642bb0..ca63f16c1f 100644
--- a/mullvad-api/src/rest.rs
+++ b/mullvad-api/src/rest.rs
@@ -131,11 +131,12 @@ pub(crate) struct RequestService<T: Stream<Item = ApiConnectionMode>> {
impl<T: Stream<Item = ApiConnectionMode> + Unpin + Send + 'static> RequestService<T> {
/// Constructs a new request service.
- pub async fn spawn(
+ pub fn spawn(
sni_hostname: Option<String>,
api_availability: ApiAvailabilityHandle,
address_cache: AddressCache,
- mut proxy_config_provider: T,
+ initial_connection_mode: ApiConnectionMode,
+ proxy_config_provider: T,
#[cfg(target_os = "android")] socket_bypass_tx: Option<mpsc::Sender<SocketBypassRequest>>,
) -> RequestServiceHandle {
let (connector, connector_handle) = HttpsConnectorWithSni::new(
@@ -145,9 +146,7 @@ impl<T: Stream<Item = ApiConnectionMode> + Unpin + Send + 'static> RequestServic
socket_bypass_tx.clone(),
);
- if let Some(config) = proxy_config_provider.next().await {
- connector_handle.set_connection_mode(config);
- }
+ connector_handle.set_connection_mode(initial_connection_mode);
let (command_tx, command_rx) = mpsc::unbounded();
let client = Client::builder().build(connector);