summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJonatan Rhodin <jonatan.rhodin@mullvad.net>2023-06-27 16:16:52 +0200
committerDavid Lönnhager <david.l@mullvad.net>2023-06-28 16:34:31 +0200
commitf56a18594bef31edde42583764e63c6f4dabfd78 (patch)
tree54826041bd7f79edd049d4f08e675c50bc4d2d1f
parent63b7607e4ab4f4d6e992d24a081cf8fdd9e25b54 (diff)
downloadmullvadvpn-f56a18594bef31edde42583764e63c6f4dabfd78.tar.xz
mullvadvpn-f56a18594bef31edde42583764e63c6f4dabfd78.zip
Expose wireguard port ranges to the android app
-rw-r--r--android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/SelectLocationScreenTest.kt9
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/PortRange.kt6
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/RelayList.kt6
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/WireguardEndpointData.kt6
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/RelayListListener.kt14
-rw-r--r--mullvad-jni/src/classes.rs2
-rw-r--r--mullvad-types/src/relay_list.rs21
7 files changed, 59 insertions, 5 deletions
diff --git a/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/SelectLocationScreenTest.kt b/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/SelectLocationScreenTest.kt
index 1dc87cddff..e67e08249e 100644
--- a/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/SelectLocationScreenTest.kt
+++ b/android/app/src/androidTest/kotlin/net/mullvad/mullvadvpn/compose/screen/SelectLocationScreenTest.kt
@@ -8,9 +8,11 @@ import kotlinx.coroutines.flow.MutableSharedFlow
import net.mullvad.mullvadvpn.compose.state.SelectLocationUiState
import net.mullvad.mullvadvpn.compose.test.CIRCULAR_PROGRESS_INDICATOR
import net.mullvad.mullvadvpn.compose.theme.AppTheme
+import net.mullvad.mullvadvpn.model.PortRange
import net.mullvad.mullvadvpn.model.RelayEndpointData
import net.mullvad.mullvadvpn.model.RelayListCity
import net.mullvad.mullvadvpn.model.RelayListCountry
+import net.mullvad.mullvadvpn.model.WireguardEndpointData
import net.mullvad.mullvadvpn.model.WireguardRelayEndpointData
import net.mullvad.mullvadvpn.relaylist.RelayList
import org.junit.Before
@@ -131,10 +133,15 @@ class SelectLocationScreenTest {
private val DUMMY_RELAY_COUNTRY_2 =
RelayListCountry("Relay Country 2", "RCo2", arrayListOf(DUMMY_RELAY_CITY_2))
+ private val DUMMY_WIREGUARD_PORT_RANGES = ArrayList<PortRange>()
+ private val DUMMY_WIREGUARD_ENDPOINT_DATA =
+ WireguardEndpointData(DUMMY_WIREGUARD_PORT_RANGES)
+
private val DUMMY_RELAY_LIST =
RelayList(
net.mullvad.mullvadvpn.model.RelayList(
- arrayListOf(DUMMY_RELAY_COUNTRY_1, DUMMY_RELAY_COUNTRY_2)
+ arrayListOf(DUMMY_RELAY_COUNTRY_1, DUMMY_RELAY_COUNTRY_2),
+ DUMMY_WIREGUARD_ENDPOINT_DATA
)
)
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/PortRange.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/PortRange.kt
new file mode 100644
index 0000000000..376f5ef7a4
--- /dev/null
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/PortRange.kt
@@ -0,0 +1,6 @@
+package net.mullvad.mullvadvpn.model
+
+import android.os.Parcelable
+import kotlinx.parcelize.Parcelize
+
+@Parcelize data class PortRange(val from: Int, val to: Int) : Parcelable
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/RelayList.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/RelayList.kt
index 2d13dc9322..60d8b6dd35 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/RelayList.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/RelayList.kt
@@ -3,4 +3,8 @@ package net.mullvad.mullvadvpn.model
import android.os.Parcelable
import kotlinx.parcelize.Parcelize
-@Parcelize data class RelayList(val countries: ArrayList<RelayListCountry>) : Parcelable
+@Parcelize
+data class RelayList(
+ val countries: ArrayList<RelayListCountry>,
+ val wireguardEndpointData: WireguardEndpointData
+) : Parcelable
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/WireguardEndpointData.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/WireguardEndpointData.kt
new file mode 100644
index 0000000000..0a21221bb0
--- /dev/null
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/WireguardEndpointData.kt
@@ -0,0 +1,6 @@
+package net.mullvad.mullvadvpn.model
+
+import android.os.Parcelable
+import kotlinx.parcelize.Parcelize
+
+@Parcelize data class WireguardEndpointData(val portRanges: ArrayList<PortRange>) : Parcelable
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/RelayListListener.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/RelayListListener.kt
index 5d18cca679..46cf492d01 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/RelayListListener.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/RelayListListener.kt
@@ -6,6 +6,7 @@ import net.mullvad.mullvadvpn.ipc.EventDispatcher
import net.mullvad.mullvadvpn.ipc.Request
import net.mullvad.mullvadvpn.model.Constraint
import net.mullvad.mullvadvpn.model.LocationConstraint
+import net.mullvad.mullvadvpn.model.PortRange
import net.mullvad.mullvadvpn.model.RelayConstraints
import net.mullvad.mullvadvpn.model.RelaySettings
import net.mullvad.mullvadvpn.model.WireguardConstraints
@@ -19,6 +20,7 @@ class RelayListListener(
) {
private var relayList: RelayList? = null
private var relaySettings: RelaySettings? = null
+ private var portRanges: List<PortRange> = emptyList()
var selectedRelayItem: RelayItem? = null
private set
@@ -59,9 +61,19 @@ class RelayListListener(
}
}
+ var onPortRangesChange: ((List<PortRange>) -> Unit)? = null
+ set(value) {
+ field = value
+
+ synchronized(this) { value?.invoke(portRanges) }
+ }
+
init {
eventDispatcher.registerHandler(Event.NewRelayList::class) { event ->
- event.relayList?.let { relayLocations -> relayListChanged(RelayList(relayLocations)) }
+ event.relayList?.let { relayLocations ->
+ relayListChanged(RelayList(relayLocations))
+ onPortRangesChange?.invoke(relayLocations.wireguardEndpointData.portRanges)
+ }
}
settingsListener.relaySettingsNotifier.subscribe(this) { newRelaySettings ->
diff --git a/mullvad-jni/src/classes.rs b/mullvad-jni/src/classes.rs
index 595084dbd6..e7d34f7966 100644
--- a/mullvad-jni/src/classes.rs
+++ b/mullvad-jni/src/classes.rs
@@ -32,6 +32,7 @@ pub const CLASSES: &[&str] = &[
"net/mullvad/mullvadvpn/model/PublicKey",
"net/mullvad/mullvadvpn/model/QuantumResistantState",
"net/mullvad/mullvadvpn/model/Port",
+ "net/mullvad/mullvadvpn/model/PortRange",
"net/mullvad/mullvadvpn/model/Relay",
"net/mullvad/mullvadvpn/model/RelayConstraints",
"net/mullvad/mullvadvpn/model/RelayEndpointData$Bridge",
@@ -57,6 +58,7 @@ pub const CLASSES: &[&str] = &[
"net/mullvad/mullvadvpn/model/VoucherSubmissionResult",
"net/mullvad/mullvadvpn/model/LoginResult",
"net/mullvad/mullvadvpn/model/WireguardConstraints",
+ "net/mullvad/mullvadvpn/model/WireguardEndpointData",
"net/mullvad/mullvadvpn/model/WireguardRelayEndpointData",
"net/mullvad/mullvadvpn/service/MullvadDaemon",
"net/mullvad/mullvadvpn/service/MullvadVpnService",
diff --git a/mullvad-types/src/relay_list.rs b/mullvad-types/src/relay_list.rs
index 9e9b77be9d..e2cd8392f5 100644
--- a/mullvad-types/src/relay_list.rs
+++ b/mullvad-types/src/relay_list.rs
@@ -22,7 +22,6 @@ pub struct RelayList {
pub openvpn: OpenVpnEndpointData,
#[cfg_attr(target_os = "android", jnix(skip))]
pub bridge: BridgeEndpointData,
- #[cfg_attr(target_os = "android", jnix(skip))]
pub wireguard: WireguardEndpointData,
}
@@ -118,13 +117,22 @@ pub struct OpenVpnEndpoint {
#[derive(Clone, Eq, PartialEq, Hash, Deserialize, Serialize, Debug)]
#[cfg_attr(target_os = "android", derive(IntoJava))]
#[cfg_attr(target_os = "android", jnix(package = "net.mullvad.mullvadvpn.model"))]
-#[cfg_attr(target_os = "android", jnix(skip_all))]
+#[serde(rename_all = "snake_case")]
pub struct WireguardEndpointData {
/// Port to connect to
+ #[cfg_attr(
+ target_os = "android",
+ jnix(
+ map = "|ranges| ranges.iter().map(|r| PortRange { from: r.0 as i32, to: r.1 as i32 } ).collect::<Vec<PortRange>>()"
+ )
+ )]
pub port_ranges: Vec<(u16, u16)>,
/// Gateways to be used with the tunnel
+ #[cfg_attr(target_os = "android", jnix(skip))]
pub ipv4_gateway: Ipv4Addr,
+ #[cfg_attr(target_os = "android", jnix(skip))]
pub ipv6_gateway: Ipv6Addr,
+ #[cfg_attr(target_os = "android", jnix(skip))]
pub udp2tcp_ports: Vec<u16>,
}
@@ -139,6 +147,15 @@ impl Default for WireguardEndpointData {
}
}
+/// Used for jni conversion
+#[cfg(target_os = "android")]
+#[derive(Clone, Eq, PartialEq, Hash, Debug, IntoJava)]
+#[jnix(package = "net.mullvad.mullvadvpn.model")]
+struct PortRange {
+ from: i32,
+ to: i32,
+}
+
/// Contains data about specific WireGuard endpoints, i.e. their public keys.
#[derive(Clone, Eq, PartialEq, Hash, Deserialize, Serialize, Debug)]
#[cfg_attr(target_os = "android", derive(IntoJava))]