diff options
| author | David Lönnhager <david.l@mullvad.net> | 2023-03-01 15:29:35 +0100 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2023-03-01 15:29:35 +0100 |
| commit | 8c2d907f30b68abda7833072ff1204bd84289225 (patch) | |
| tree | f1ae7a83bc648d05ec2b1a8a88741682dd8cffa7 | |
| parent | 2bd5e536d34bb60ba4a77fb6d37f2c5eff23463c (diff) | |
| parent | 9f8b9e1245d3ee6e38006c606f44a1b5e9d20a50 (diff) | |
| download | mullvadvpn-8c2d907f30b68abda7833072ff1204bd84289225.tar.xz mullvadvpn-8c2d907f30b68abda7833072ff1204bd84289225.zip | |
Merge branch 'android-override-hostname' into main
3 files changed, 28 insertions, 4 deletions
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 db118b8e31..ba5ba01810 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 @@ -15,7 +15,6 @@ import net.mullvad.mullvadvpn.lib.endpoint.CustomApiEndpointConfiguration import net.mullvad.mullvadvpn.test.common.interactor.AppInteractor import net.mullvad.mullvadvpn.test.common.rule.CaptureScreenshotOnFailedTestRule import net.mullvad.mullvadvpn.test.mockapi.constant.LOG_TAG -import net.mullvad.mullvadvpn.test.mockapi.constant.MOCK_SERVER_LOCALHOST_ADDRESS import okhttp3.mockwebserver.MockWebServer import org.junit.After import org.junit.Before @@ -68,7 +67,7 @@ abstract class MockApiTest { private fun createEndpoint(port: Int): CustomApiEndpointConfiguration { val mockApiSocket = InetSocketAddress( - InetAddress.getByName(MOCK_SERVER_LOCALHOST_ADDRESS), + InetAddress.getLocalHost(), port ) val api = ApiEndpoint( diff --git a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/constant/Constants.kt b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/constant/Constants.kt index 713a712bf4..ba1ecad36e 100644 --- a/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/constant/Constants.kt +++ b/android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/constant/Constants.kt @@ -2,8 +2,6 @@ package net.mullvad.mullvadvpn.test.mockapi.constant const val LOG_TAG = "mullvad-mockapi" -const val MOCK_SERVER_LOCALHOST_ADDRESS = "127.0.0.1" - const val AUTH_TOKEN_URL_PATH = "/auth/v1/token" const val DEVICES_URL_PATH = "/accounts/v1/devices" const val ACCOUNT_URL_PATH = "/accounts/v1/accounts/me" diff --git a/mullvad-jni/src/lib.rs b/mullvad-jni/src/lib.rs index b7e0815bfa..370959c4e5 100644 --- a/mullvad-jni/src/lib.rs +++ b/mullvad-jni/src/lib.rs @@ -257,6 +257,9 @@ fn api_endpoint_from_java(env: &JnixEnv<'_>, object: JObject<'_>) -> mullvad_api endpoint.addr = try_socketaddr_from_java(env, address).expect("received unresolved InetSocketAddress"); + if let Some(host) = try_hostname_from_java(env, address) { + endpoint.host = host; + } endpoint.disable_address_cache = env .call_method(object, "component2", "()Z", &[]) .expect("missing ApiEndpoint.disableAddressCache") @@ -314,6 +317,30 @@ fn try_socketaddr_from_java(env: &JnixEnv<'_>, address: JObject<'_>) -> Option<S )) } +/// Returns the hostname for an InetSocketAddress. This may be an IP address converted to +/// a string. +#[cfg(feature = "api-override")] +fn try_hostname_from_java(env: &JnixEnv<'_>, address: JObject<'_>) -> Option<String> { + let class = env.get_class("java/net/InetSocketAddress"); + + let method_id = env + .get_method_id(&class, "getHostString", "()Ljava/lang/String;") + .expect("Failed to get method ID for InetSocketAddress.getHostString()"); + let return_type = JavaType::Object("java/lang/String".to_owned()); + + let hostname = env + .call_method_unchecked(address, method_id, return_type, &[]) + .expect("Failed to call InetSocketAddress.getHostString()") + .l() + .expect("Call to InetSocketAddress.getHostString() did not return an object"); + + if hostname.is_null() { + return None; + } + + Some(String::from_java(env, hostname)) +} + fn start_logging(log_dir: &Path) -> Result<(), String> { unsafe { LOG_START.call_once(|| LOG_INIT_RESULT = Some(initialize_logging(log_dir))); |
