diff options
| author | David Göransson <david.goransson@mullvad.net> | 2025-05-21 14:08:27 +0200 |
|---|---|---|
| committer | David Göransson <david.goransson@mullvad.net> | 2025-05-21 14:08:27 +0200 |
| commit | af0cf2dc5bb6da8806fa89b70eeae220adc5a8d4 (patch) | |
| tree | 32d60db545f67512f4726cd3a49ed2de71a214bc | |
| parent | b708e86feb1235a6241cd12e1b8315cea19a12d5 (diff) | |
| parent | 4a528bf707ffb03df880b3a2a566ba48f59b6e07 (diff) | |
| download | mullvadvpn-af0cf2dc5bb6da8806fa89b70eeae220adc5a8d4.tar.xz mullvadvpn-af0cf2dc5bb6da8806fa89b70eeae220adc5a8d4.zip | |
Merge branch 'fix-failing-dns-resolving-on-boot-of-daemon-when-running-droid-2005'
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") |
