summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Göransson <david.goransson@mullvad.net>2025-05-21 14:08:27 +0200
committerDavid Göransson <david.goransson@mullvad.net>2025-05-21 14:08:27 +0200
commitaf0cf2dc5bb6da8806fa89b70eeae220adc5a8d4 (patch)
tree32d60db545f67512f4726cd3a49ed2de71a214bc
parentb708e86feb1235a6241cd12e1b8315cea19a12d5 (diff)
parent4a528bf707ffb03df880b3a2a566ba48f59b6e07 (diff)
downloadmullvadvpn-af0cf2dc5bb6da8806fa89b70eeae220adc5a8d4.tar.xz
mullvadvpn-af0cf2dc5bb6da8806fa89b70eeae220adc5a8d4.zip
Merge branch 'fix-failing-dns-resolving-on-boot-of-daemon-when-running-droid-2005'
-rw-r--r--android/lib/endpoint/src/main/kotlin/net/mullvad/mullvadvpn/lib/endpoint/ApiEndpointOverride.kt1
-rw-r--r--android/service/build.gradle.kts3
-rw-r--r--android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/di/VpnServiceModule.kt2
-rw-r--r--android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/api/mullvad/MullvadApi.kt2
-rw-r--r--android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/api/relay/RelayApi.kt2
-rw-r--r--android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/MockApiTest.kt7
-rw-r--r--mullvad-jni/src/api.rs38
7 files changed, 34 insertions, 21 deletions
diff --git a/android/lib/endpoint/src/main/kotlin/net/mullvad/mullvadvpn/lib/endpoint/ApiEndpointOverride.kt b/android/lib/endpoint/src/main/kotlin/net/mullvad/mullvadvpn/lib/endpoint/ApiEndpointOverride.kt
index 7350aa0d26..3c86b4427a 100644
--- a/android/lib/endpoint/src/main/kotlin/net/mullvad/mullvadvpn/lib/endpoint/ApiEndpointOverride.kt
+++ b/android/lib/endpoint/src/main/kotlin/net/mullvad/mullvadvpn/lib/endpoint/ApiEndpointOverride.kt
@@ -6,6 +6,7 @@ import kotlinx.parcelize.Parcelize
@Parcelize
data class ApiEndpointOverride(
val hostname: String,
+ val address: String,
val port: Int = CUSTOM_ENDPOINT_HTTPS_PORT,
val disableTls: Boolean = false,
val forceDirectConnection: Boolean = true,
diff --git a/android/service/build.gradle.kts b/android/service/build.gradle.kts
index 4fd794c765..004e7a9d7b 100644
--- a/android/service/build.gradle.kts
+++ b/android/service/build.gradle.kts
@@ -46,14 +46,17 @@ android {
isDefault = true
// Not used for production builds.
buildConfigField("String", "API_ENDPOINT", "\"\"")
+ buildConfigField("String", "API_IP", "\"\"")
}
create(Flavors.DEVMOLE) {
dimension = FlavorDimensions.INFRASTRUCTURE
buildConfigField("String", "API_ENDPOINT", "\"api-app.devmole.eu\"")
+ buildConfigField("String", "API_IP", "\"185.217.116.4\"")
}
create(Flavors.STAGEMOLE) {
dimension = FlavorDimensions.INFRASTRUCTURE
buildConfigField("String", "API_ENDPOINT", "\"api-app.stagemole.eu\"")
+ buildConfigField("String", "API_IP", "\"185.217.116.132\"")
}
}
diff --git a/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/di/VpnServiceModule.kt b/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/di/VpnServiceModule.kt
index 9d4636cf07..c33b8ef518 100644
--- a/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/di/VpnServiceModule.kt
+++ b/android/service/src/main/kotlin/net/mullvad/mullvadvpn/service/di/VpnServiceModule.kt
@@ -63,7 +63,7 @@ val vpnServiceModule = module {
cacheDir = get(named(CACHE_DIR_NAMED_ARGUMENT)),
apiEndpointOverride =
if (BuildConfig.FLAVOR_infrastructure != "prod") {
- ApiEndpointOverride(BuildConfig.API_ENDPOINT)
+ ApiEndpointOverride(BuildConfig.API_ENDPOINT, BuildConfig.API_IP)
} else {
null
},
diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/api/mullvad/MullvadApi.kt b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/api/mullvad/MullvadApi.kt
index 099808fcdb..0eb5d9a264 100644
--- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/api/mullvad/MullvadApi.kt
+++ b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/api/mullvad/MullvadApi.kt
@@ -83,7 +83,7 @@ class MullvadApi {
}
companion object {
- private const val BASE_URL = "api.${BuildConfig.INFRASTRUCTURE_BASE_DOMAIN}"
+ private const val BASE_URL = "api-app.${BuildConfig.INFRASTRUCTURE_BASE_DOMAIN}"
private const val AUTH_PATH = "auth/v1/token"
private const val DEVICES_PATH = "accounts/v1/devices"
}
diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/api/relay/RelayApi.kt b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/api/relay/RelayApi.kt
index 767851bc1c..b09dd9eae4 100644
--- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/api/relay/RelayApi.kt
+++ b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/api/relay/RelayApi.kt
@@ -49,7 +49,7 @@ class RelayApi {
}
companion object {
- private const val BASE_URL = "api.${BuildConfig.INFRASTRUCTURE_BASE_DOMAIN}"
+ private const val BASE_URL = "api-app.${BuildConfig.INFRASTRUCTURE_BASE_DOMAIN}"
private const val RELAY_PATH = "app/v1/relays"
}
}
diff --git a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/MockApiTest.kt b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/MockApiTest.kt
index 6327a54757..314aa1f09e 100644
--- a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/MockApiTest.kt
+++ b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/MockApiTest.kt
@@ -55,6 +55,11 @@ abstract class MockApiTest {
}
private fun createEndpoint(port: Int): ApiEndpointOverride {
- return ApiEndpointOverride(InetAddress.getLocalHost().hostName, port, disableTls = true)
+ return ApiEndpointOverride(
+ InetAddress.getLocalHost().hostName,
+ InetAddress.getLocalHost().hostAddress!!,
+ port,
+ disableTls = true,
+ )
}
}
diff --git a/mullvad-jni/src/api.rs b/mullvad-jni/src/api.rs
index 81043871f8..e35083eb1b 100644
--- a/mullvad-jni/src/api.rs
+++ b/mullvad-jni/src/api.rs
@@ -2,7 +2,9 @@
use jnix::FromJava;
use jnix::{jni::objects::JObject, JnixEnv};
#[cfg(feature = "api-override")]
-use std::net::{SocketAddr, ToSocketAddrs};
+use std::net::{IpAddr, ToSocketAddrs};
+#[cfg(feature = "api-override")]
+use std::str::FromStr;
#[cfg(feature = "api-override")]
pub fn api_endpoint_from_java(
@@ -14,12 +16,14 @@ pub fn api_endpoint_from_java(
}
let hostname = hostname_from_java(env, endpoint_override);
+ let address = address_from_java(env, endpoint_override);
+ let ip_addr = IpAddr::from_str(&address).expect("Invalid IP address");
let port = port_from_java(env, endpoint_override);
- let address = Some(create_socket_addr(hostname.clone(), port));
+ let socket_addr = (ip_addr, port).to_socket_addrs().unwrap().next().unwrap();
Some(mullvad_api::ApiEndpoint {
host: Some(hostname),
- address,
+ address: Some(socket_addr),
disable_tls: disable_tls_from_java(env, endpoint_override),
force_direct: force_direct_from_java(env, endpoint_override),
})
@@ -36,17 +40,6 @@ pub fn api_endpoint_from_java(
panic!("Trying to set api override when feature is disabled")
}
-/// Resolves the hostname and port to SocketAddr
-#[cfg(feature = "api-override")]
-fn create_socket_addr(hostname: String, port: u16) -> SocketAddr {
- //Resolve ip address from hostname
- (hostname, port)
- .to_socket_addrs()
- .expect("could not resolve address")
- .next()
- .expect("no ip address received")
-}
-
#[cfg(feature = "api-override")]
fn hostname_from_java(env: &JnixEnv<'_>, endpoint_override: JObject<'_>) -> String {
let hostname = env
@@ -59,9 +52,20 @@ fn hostname_from_java(env: &JnixEnv<'_>, endpoint_override: JObject<'_>) -> Stri
}
#[cfg(feature = "api-override")]
+fn address_from_java(env: &JnixEnv<'_>, endpoint_override: JObject<'_>) -> String {
+ let hostname = env
+ .call_method(endpoint_override, "component2", "()Ljava/lang/String;", &[])
+ .expect("missing ApiEndpointOverride.address")
+ .l()
+ .expect("ApiEndpointOverride.address is not a string");
+
+ String::from_java(env, hostname)
+}
+
+#[cfg(feature = "api-override")]
fn port_from_java(env: &JnixEnv<'_>, endpoint_override: JObject<'_>) -> u16 {
let port = env
- .call_method(endpoint_override, "component2", "()I", &[])
+ .call_method(endpoint_override, "component3", "()I", &[])
.expect("missing ApiEndpointOverride.port")
.i()
.expect("ApiEndpointOverride.port is not a int");
@@ -71,7 +75,7 @@ fn port_from_java(env: &JnixEnv<'_>, endpoint_override: JObject<'_>) -> u16 {
#[cfg(feature = "api-override")]
fn disable_tls_from_java(env: &JnixEnv<'_>, endpoint_override: JObject<'_>) -> bool {
- env.call_method(endpoint_override, "component3", "()Z", &[])
+ env.call_method(endpoint_override, "component4", "()Z", &[])
.expect("missing ApiEndpointOverride.disableTls")
.z()
.expect("ApiEndpointOverride.disableTls is not a bool")
@@ -79,7 +83,7 @@ fn disable_tls_from_java(env: &JnixEnv<'_>, endpoint_override: JObject<'_>) -> b
#[cfg(feature = "api-override")]
fn force_direct_from_java(env: &JnixEnv<'_>, endpoint_override: JObject<'_>) -> bool {
- env.call_method(endpoint_override, "component4", "()Z", &[])
+ env.call_method(endpoint_override, "component5", "()Z", &[])
.expect("missing ApiEndpointOverride.forceDirectConnection")
.z()
.expect("ApiEndpointOverride.forceDirectConnection is not a bool")