summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2023-03-01 15:29:35 +0100
committerDavid Lönnhager <david.l@mullvad.net>2023-03-01 15:29:35 +0100
commit8c2d907f30b68abda7833072ff1204bd84289225 (patch)
treef1ae7a83bc648d05ec2b1a8a88741682dd8cffa7
parent2bd5e536d34bb60ba4a77fb6d37f2c5eff23463c (diff)
parent9f8b9e1245d3ee6e38006c606f44a1b5e9d20a50 (diff)
downloadmullvadvpn-8c2d907f30b68abda7833072ff1204bd84289225.tar.xz
mullvadvpn-8c2d907f30b68abda7833072ff1204bd84289225.zip
Merge branch 'android-override-hostname' into main
-rw-r--r--android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/MockApiTest.kt3
-rw-r--r--android/test/mockapi/src/main/kotlin/net/mullvad/mullvadvpn/test/mockapi/constant/Constants.kt2
-rw-r--r--mullvad-jni/src/lib.rs27
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)));