summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/VpnSettingsScreen.kt2
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/VpnSettingsUiState.kt21
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ipc/Request.kt5
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/QuantumResistantState.kt11
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/WireguardTunnelOptions.kt3
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/repository/SettingsRepository.kt3
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt10
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/SettingsListener.kt9
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/SettingsListener.kt7
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModel.kt5
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModelState.kt5
-rw-r--r--mullvad-jni/src/classes.rs1
-rw-r--r--mullvad-jni/src/daemon_interface.rs17
-rw-r--r--mullvad-jni/src/lib.rs23
-rw-r--r--mullvad-types/src/wireguard.rs12
15 files changed, 102 insertions, 32 deletions
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/VpnSettingsScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/VpnSettingsScreen.kt
index 9ac2a761ff..805801946d 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/VpnSettingsScreen.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/VpnSettingsScreen.kt
@@ -156,7 +156,7 @@ fun VpnSettingsScreen(
toastMessagesSharedFlow: SharedFlow<String>,
onSelectObfuscationSetting: (selectedObfuscation: SelectedObfuscation) -> Unit = {},
onObfuscationInfoClick: () -> Unit = {},
- onSelectQuantumResistanceSetting: (quantumResistant: Boolean?) -> Unit = {},
+ onSelectQuantumResistanceSetting: (quantumResistant: QuantumResistantState) -> Unit = {},
onQuantumResistanceInfoClicked: () -> Unit = {}
) {
val cellVerticalSpacing = dimensionResource(id = R.dimen.cell_label_vertical_padding)
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/VpnSettingsUiState.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/VpnSettingsUiState.kt
index c2c7d074fd..1515b2d19a 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/VpnSettingsUiState.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/state/VpnSettingsUiState.kt
@@ -1,6 +1,7 @@
package net.mullvad.mullvadvpn.compose.state
import net.mullvad.mullvadvpn.model.DefaultDnsOptions
+import net.mullvad.mullvadvpn.model.QuantumResistantState
import net.mullvad.mullvadvpn.model.SelectedObfuscation
import net.mullvad.mullvadvpn.viewmodel.CustomDnsItem
import net.mullvad.mullvadvpn.viewmodel.StagedDns
@@ -14,7 +15,7 @@ sealed interface VpnSettingsUiState {
val contentBlockersOptions: DefaultDnsOptions
val isAllowLanEnabled: Boolean
val selectedObfuscation: SelectedObfuscation
- val quantumResistant: Boolean?
+ val quantumResistant: QuantumResistantState
data class DefaultUiState(
override val mtu: String = "",
@@ -25,7 +26,7 @@ sealed interface VpnSettingsUiState {
override val customDnsItems: List<CustomDnsItem> = listOf(),
override val contentBlockersOptions: DefaultDnsOptions = DefaultDnsOptions(),
override val selectedObfuscation: SelectedObfuscation = SelectedObfuscation.Off,
- override val quantumResistant: Boolean? = null
+ override val quantumResistant: QuantumResistantState = QuantumResistantState.Off
) : VpnSettingsUiState
data class MtuDialogUiState(
@@ -38,7 +39,7 @@ sealed interface VpnSettingsUiState {
override val contentBlockersOptions: DefaultDnsOptions = DefaultDnsOptions(),
val mtuEditValue: String,
override val selectedObfuscation: SelectedObfuscation = SelectedObfuscation.Off,
- override val quantumResistant: Boolean? = null
+ override val quantumResistant: QuantumResistantState = QuantumResistantState.Off
) : VpnSettingsUiState
data class DnsDialogUiState(
@@ -51,7 +52,7 @@ sealed interface VpnSettingsUiState {
override val contentBlockersOptions: DefaultDnsOptions = DefaultDnsOptions(),
val stagedDns: StagedDns,
override val selectedObfuscation: SelectedObfuscation = SelectedObfuscation.Off,
- override val quantumResistant: Boolean? = null
+ override val quantumResistant: QuantumResistantState = QuantumResistantState.Off
) : VpnSettingsUiState
data class LocalNetworkSharingInfoDialogUiState(
@@ -63,7 +64,7 @@ sealed interface VpnSettingsUiState {
override val customDnsItems: List<CustomDnsItem> = listOf(),
override val contentBlockersOptions: DefaultDnsOptions = DefaultDnsOptions(),
override val selectedObfuscation: SelectedObfuscation = SelectedObfuscation.Off,
- override val quantumResistant: Boolean? = null
+ override val quantumResistant: QuantumResistantState = QuantumResistantState.Off
) : VpnSettingsUiState
data class ContentBlockersInfoDialogUiState(
@@ -75,7 +76,7 @@ sealed interface VpnSettingsUiState {
override val customDnsItems: List<CustomDnsItem> = listOf(),
override val contentBlockersOptions: DefaultDnsOptions = DefaultDnsOptions(),
override val selectedObfuscation: SelectedObfuscation = SelectedObfuscation.Off,
- override val quantumResistant: Boolean? = null
+ override val quantumResistant: QuantumResistantState = QuantumResistantState.Off
) : VpnSettingsUiState
data class CustomDnsInfoDialogUiState(
@@ -87,7 +88,7 @@ sealed interface VpnSettingsUiState {
override val customDnsItems: List<CustomDnsItem> = listOf(),
override val contentBlockersOptions: DefaultDnsOptions = DefaultDnsOptions(),
override val selectedObfuscation: SelectedObfuscation = SelectedObfuscation.Off,
- override val quantumResistant: Boolean? = null
+ override val quantumResistant: QuantumResistantState = QuantumResistantState.Off
) : VpnSettingsUiState
data class MalwareInfoDialogUiState(
@@ -99,7 +100,7 @@ sealed interface VpnSettingsUiState {
override val customDnsItems: List<CustomDnsItem> = listOf(),
override val contentBlockersOptions: DefaultDnsOptions = DefaultDnsOptions(),
override val selectedObfuscation: SelectedObfuscation = SelectedObfuscation.Off,
- override val quantumResistant: Boolean? = null
+ override val quantumResistant: QuantumResistantState = QuantumResistantState.Off
) : VpnSettingsUiState
data class ObfuscationInfoDialogUiState(
@@ -111,7 +112,7 @@ sealed interface VpnSettingsUiState {
override val customDnsItems: List<CustomDnsItem> = listOf(),
override val contentBlockersOptions: DefaultDnsOptions = DefaultDnsOptions(),
override val selectedObfuscation: SelectedObfuscation = SelectedObfuscation.Off,
- override val quantumResistant: Boolean? = null
+ override val quantumResistant: QuantumResistantState = QuantumResistantState.Off
) : VpnSettingsUiState
data class QuantumResistanceInfoDialogUiState(
@@ -123,6 +124,6 @@ sealed interface VpnSettingsUiState {
override val customDnsItems: List<CustomDnsItem> = listOf(),
override val contentBlockersOptions: DefaultDnsOptions = DefaultDnsOptions(),
override val selectedObfuscation: SelectedObfuscation = SelectedObfuscation.Off,
- override val quantumResistant: Boolean? = null
+ override val quantumResistant: QuantumResistantState = QuantumResistantState.Off
) : VpnSettingsUiState
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ipc/Request.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ipc/Request.kt
index c9bd699c12..7ff4a63ff4 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ipc/Request.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ipc/Request.kt
@@ -7,6 +7,7 @@ import kotlinx.parcelize.Parcelize
import net.mullvad.mullvadvpn.model.DnsOptions
import net.mullvad.mullvadvpn.model.LocationConstraint
import net.mullvad.mullvadvpn.model.ObfuscationSettings
+import net.mullvad.mullvadvpn.model.QuantumResistantState
// Requests that the service can handle
sealed class Request : Message.RequestMessage() {
@@ -85,7 +86,9 @@ sealed class Request : Message.RequestMessage() {
@Parcelize data class SetObfuscationSettings(val settings: ObfuscationSettings?) : Request()
- @Parcelize data class SetWireGuardQuantumResistant(val quantumResistant: Boolean?) : Request()
+ @Parcelize
+ data class SetWireGuardQuantumResistant(val quantumResistant: QuantumResistantState) :
+ Request()
companion object {
private const val MESSAGE_KEY = "request"
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/QuantumResistantState.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/QuantumResistantState.kt
new file mode 100644
index 0000000000..a19267388a
--- /dev/null
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/QuantumResistantState.kt
@@ -0,0 +1,11 @@
+package net.mullvad.mullvadvpn.model
+
+import android.os.Parcelable
+import kotlinx.parcelize.Parcelize
+
+@Parcelize
+enum class QuantumResistantState : Parcelable {
+ Auto,
+ On,
+ Off
+}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/WireguardTunnelOptions.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/WireguardTunnelOptions.kt
index 47c8c54a57..f4a869a4ea 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/WireguardTunnelOptions.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/WireguardTunnelOptions.kt
@@ -4,4 +4,5 @@ import android.os.Parcelable
import kotlinx.parcelize.Parcelize
@Parcelize
-data class WireguardTunnelOptions(val mtu: Int?, val quantumResistant: Boolean?) : Parcelable
+data class WireguardTunnelOptions(val mtu: Int?, val quantumResistant: QuantumResistantState) :
+ Parcelable
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/repository/SettingsRepository.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/repository/SettingsRepository.kt
index cde1c698ca..ac9637c683 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/repository/SettingsRepository.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/repository/SettingsRepository.kt
@@ -14,6 +14,7 @@ import net.mullvad.mullvadvpn.model.DefaultDnsOptions
import net.mullvad.mullvadvpn.model.DnsOptions
import net.mullvad.mullvadvpn.model.DnsState
import net.mullvad.mullvadvpn.model.ObfuscationSettings
+import net.mullvad.mullvadvpn.model.QuantumResistantState
import net.mullvad.mullvadvpn.model.Settings
import net.mullvad.mullvadvpn.ui.serviceconnection.ServiceConnectionManager
import net.mullvad.mullvadvpn.ui.serviceconnection.customDns
@@ -54,7 +55,7 @@ class SettingsRepository(
serviceConnectionManager.settingsListener()?.wireguardMtu = value
}
- fun setWireguardQuantumResistant(value: Boolean?) {
+ fun setWireguardQuantumResistant(value: QuantumResistantState) {
serviceConnectionManager.settingsListener()?.wireguardQuantumResistant = value
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt
index d46a71d805..089e13ef31 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/service/MullvadDaemon.kt
@@ -14,6 +14,7 @@ import net.mullvad.mullvadvpn.model.GeoIpLocation
import net.mullvad.mullvadvpn.model.GetAccountDataResult
import net.mullvad.mullvadvpn.model.LoginResult
import net.mullvad.mullvadvpn.model.ObfuscationSettings
+import net.mullvad.mullvadvpn.model.QuantumResistantState
import net.mullvad.mullvadvpn.model.RelayList
import net.mullvad.mullvadvpn.model.RelaySettingsUpdate
import net.mullvad.mullvadvpn.model.RemoveDeviceEvent
@@ -178,6 +179,10 @@ class MullvadDaemon(
setObfuscationSettings(daemonInterfaceAddress, settings)
}
+ fun setQuantumResistant(quantumResistant: QuantumResistantState) {
+ setQuantumResistantTunnel(daemonInterfaceAddress, quantumResistant)
+ }
+
fun onDestroy() {
onSettingsChange.unsubscribeAll()
onTunnelStateChange.unsubscribeAll()
@@ -255,6 +260,11 @@ class MullvadDaemon(
settings: ObfuscationSettings?
)
+ private external fun setQuantumResistantTunnel(
+ daemonInterfaceAddress: Long,
+ quantumResistant: QuantumResistantState
+ )
+
private fun notifyAppVersionInfoEvent(appVersionInfo: AppVersionInfo) {
onAppVersionInfoChange?.invoke(appVersionInfo)
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/SettingsListener.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/SettingsListener.kt
index cd0da7a3fc..fec7578a05 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/SettingsListener.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/SettingsListener.kt
@@ -1,6 +1,5 @@
package net.mullvad.mullvadvpn.service.endpoint
-import android.util.Log
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.channels.Channel
@@ -19,6 +18,7 @@ class SettingsListener(endpoint: ServiceEndpoint) {
class SetAutoConnect(val autoConnect: Boolean) : Command()
class SetWireGuardMtu(val mtu: Int?) : Command()
class SetObfuscationSettings(val settings: ObfuscationSettings?) : Command()
+ class SetQuantumResistant(val quantumResistant: QuantumResistantState) : Command()
}
private val commandChannel = spawnActor()
@@ -62,8 +62,9 @@ class SettingsListener(endpoint: ServiceEndpoint) {
}
registerHandler(Request.SetWireGuardQuantumResistant::class) { request ->
- // TODO
- Log.d("Remove this", "Set quantum resistant ${request.quantumResistant}")
+ commandChannel.trySendBlocking(
+ Command.SetQuantumResistant(request.quantumResistant)
+ )
}
}
}
@@ -127,6 +128,8 @@ class SettingsListener(endpoint: ServiceEndpoint) {
is Command.SetWireGuardMtu -> daemon.await().setWireguardMtu(command.mtu)
is Command.SetObfuscationSettings ->
daemon.await().setObfuscationSettings(command.settings)
+ is Command.SetQuantumResistant ->
+ daemon.await().setQuantumResistant(command.quantumResistant)
}
}
} catch (exception: ClosedReceiveChannelException) {
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/SettingsListener.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/SettingsListener.kt
index 5cfb4f1f0b..4146c66ce8 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/SettingsListener.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/SettingsListener.kt
@@ -6,6 +6,7 @@ import net.mullvad.mullvadvpn.ipc.EventDispatcher
import net.mullvad.mullvadvpn.ipc.Request
import net.mullvad.mullvadvpn.model.DnsOptions
import net.mullvad.mullvadvpn.model.ObfuscationSettings
+import net.mullvad.mullvadvpn.model.QuantumResistantState
import net.mullvad.mullvadvpn.model.RelaySettings
import net.mullvad.mullvadvpn.model.Settings
import net.mullvad.talpid.util.EventNotifier
@@ -35,8 +36,10 @@ class SettingsListener(private val connection: Messenger, eventDispatcher: Event
connection.send(Request.SetWireGuardMtu(value).message)
}
- var wireguardQuantumResistant: Boolean?
- get() = settingsNotifier.latestEvent?.tunnelOptions?.wireguard?.quantumResistant
+ var wireguardQuantumResistant: QuantumResistantState
+ get() =
+ settingsNotifier.latestEvent?.tunnelOptions?.wireguard?.quantumResistant
+ ?: QuantumResistantState.Off
set(value) {
connection.send(Request.SetWireGuardQuantumResistant(value).message)
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModel.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModel.kt
index b8ff734287..81811722c7 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModel.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModel.kt
@@ -22,6 +22,7 @@ import net.mullvad.mullvadvpn.model.Constraint
import net.mullvad.mullvadvpn.model.DefaultDnsOptions
import net.mullvad.mullvadvpn.model.DnsState
import net.mullvad.mullvadvpn.model.ObfuscationSettings
+import net.mullvad.mullvadvpn.model.QuantumResistantState
import net.mullvad.mullvadvpn.model.SelectedObfuscation
import net.mullvad.mullvadvpn.model.Settings
import net.mullvad.mullvadvpn.model.Udp2TcpObfuscationSettings
@@ -56,7 +57,7 @@ class VpnSettingsViewModel(
selectedObfuscation = settings?.selectedObfuscationSettings()
?: SelectedObfuscation.Off,
dialogState = dialogState,
- quantumResistant = settings?.quantumResistant()
+ quantumResistant = settings?.quantumResistant() ?: QuantumResistantState.Off
)
}
.stateIn(
@@ -306,7 +307,7 @@ class VpnSettingsViewModel(
dialogState.update { VpnSettingsDialogState.ObfuscationInfoDialog }
}
- fun onSelectQuantumResistanceSetting(quantumResistant: Boolean?) {
+ fun onSelectQuantumResistanceSetting(quantumResistant: QuantumResistantState) {
viewModelScope.launch(dispatcher) {
repository.setWireguardQuantumResistant(quantumResistant)
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModelState.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModelState.kt
index 86f0c980eb..520296784a 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModelState.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/viewmodel/VpnSettingsViewModelState.kt
@@ -2,6 +2,7 @@ package net.mullvad.mullvadvpn.viewmodel
import net.mullvad.mullvadvpn.compose.state.VpnSettingsUiState
import net.mullvad.mullvadvpn.model.DefaultDnsOptions
+import net.mullvad.mullvadvpn.model.QuantumResistantState
import net.mullvad.mullvadvpn.model.SelectedObfuscation
data class VpnSettingsViewModelState(
@@ -14,7 +15,7 @@ data class VpnSettingsViewModelState(
val contentBlockersOptions: DefaultDnsOptions,
val selectedObfuscation: SelectedObfuscation,
val dialogState: VpnSettingsDialogState,
- val quantumResistant: Boolean?
+ val quantumResistant: QuantumResistantState
) {
fun toUiState(): VpnSettingsUiState {
return when (dialogState) {
@@ -140,7 +141,7 @@ data class VpnSettingsViewModelState(
isAllowLanEnabled = false,
dialogState = VpnSettingsDialogState.NoDialog,
selectedObfuscation = SelectedObfuscation.Auto,
- quantumResistant = null
+ quantumResistant = QuantumResistantState.Off
)
}
}
diff --git a/mullvad-jni/src/classes.rs b/mullvad-jni/src/classes.rs
index eea0dd6544..d4765e78a4 100644
--- a/mullvad-jni/src/classes.rs
+++ b/mullvad-jni/src/classes.rs
@@ -30,6 +30,7 @@ pub const CLASSES: &[&str] = &[
"net/mullvad/mullvadvpn/model/LocationConstraint$Hostname",
"net/mullvad/mullvadvpn/model/ObfuscationSettings",
"net/mullvad/mullvadvpn/model/PublicKey",
+ "net/mullvad/mullvadvpn/model/QuantumResistantState",
"net/mullvad/mullvadvpn/model/Relay",
"net/mullvad/mullvadvpn/model/RelayConstraints",
"net/mullvad/mullvadvpn/model/RelayEndpointData$Bridge",
diff --git a/mullvad-jni/src/daemon_interface.rs b/mullvad-jni/src/daemon_interface.rs
index 78e50c3d86..771c432a7a 100644
--- a/mullvad-jni/src/daemon_interface.rs
+++ b/mullvad-jni/src/daemon_interface.rs
@@ -10,6 +10,7 @@ use mullvad_types::{
states::{TargetState, TunnelState},
version::AppVersionInfo,
wireguard,
+ wireguard::QuantumResistantState,
};
#[derive(Debug, err_derive::Error)]
@@ -326,6 +327,22 @@ impl DaemonInterface {
.map_err(|_| Error::UpdateSettings)
}
+ pub fn set_quantum_resistant_tunnel(
+ &self,
+ quantum_resistant: QuantumResistantState,
+ ) -> Result<()> {
+ let (tx, rx) = oneshot::channel();
+
+ self.send_command(DaemonCommand::SetQuantumResistantTunnel(
+ tx,
+ quantum_resistant,
+ ))?;
+
+ block_on(rx)
+ .map_err(|_| Error::NoResponse)?
+ .map_err(|_| Error::UpdateSettings)
+ }
+
fn send_command(&self, command: DaemonCommand) -> Result<()> {
self.command_sender.send(command).map_err(Error::NoDaemon)
}
diff --git a/mullvad-jni/src/lib.rs b/mullvad-jni/src/lib.rs
index cb8ddb9e5f..5d062ffbbc 100644
--- a/mullvad-jni/src/lib.rs
+++ b/mullvad-jni/src/lib.rs
@@ -1238,6 +1238,29 @@ pub extern "system" fn Java_net_mullvad_mullvadvpn_service_MullvadDaemon_setObfu
}
}
+#[no_mangle]
+#[allow(non_snake_case)]
+pub extern "system" fn Java_net_mullvad_mullvadvpn_service_MullvadDaemon_setQuantumResistantTunnel(
+ env: JNIEnv<'_>,
+ _: JObject<'_>,
+ daemon_interface_address: jlong,
+ quantumResistantState: JObject<'_>,
+) {
+ let env = JnixEnv::from(env);
+
+ // SAFETY: The address points to an instance valid for the duration of this function call
+ if let Some(daemon_interface) = unsafe { get_daemon_interface(daemon_interface_address) } {
+ let quantum_resistant = FromJava::from_java(&env, quantumResistantState);
+
+ if let Err(error) = daemon_interface.set_quantum_resistant_tunnel(quantum_resistant) {
+ log::error!(
+ "{}",
+ error.display_chain_with_msg("Failed to update quantum resistant tunnel state")
+ );
+ }
+ }
+}
+
fn log_request_error(request: &str, error: &daemon_interface::Error) {
match error {
daemon_interface::Error::Api(RestError::Aborted) => {
diff --git a/mullvad-types/src/wireguard.rs b/mullvad-types/src/wireguard.rs
index 2e699c344e..9fdda6cb20 100644
--- a/mullvad-types/src/wireguard.rs
+++ b/mullvad-types/src/wireguard.rs
@@ -1,7 +1,7 @@
#![allow(clippy::identity_op)]
use chrono::{offset::Utc, DateTime};
#[cfg(target_os = "android")]
-use jnix::IntoJava;
+use jnix::{FromJava, IntoJava};
use serde::{Deserialize, Deserializer, Serialize};
use std::{convert::TryFrom, fmt, str::FromStr, time::Duration};
use talpid_types::net::wireguard;
@@ -15,6 +15,8 @@ pub const DEFAULT_ROTATION_INTERVAL: Duration = MAX_ROTATION_INTERVAL;
const QUANTUM_RESISTANT_AUTO_STATE: bool = false;
#[derive(Serialize, Deserialize, Copy, Clone, Debug, PartialEq, Eq)]
+#[cfg_attr(target_os = "android", derive(IntoJava, FromJava))]
+#[cfg_attr(target_os = "android", jnix(package = "net.mullvad.mullvadvpn.model"))]
#[serde(rename_all = "lowercase")]
#[cfg_attr(feature = "clap", derive(clap::ValueEnum))]
pub enum QuantumResistantState {
@@ -201,14 +203,6 @@ pub struct TunnelOptions {
#[serde(rename = "wireguard_nt")]
pub use_wireguard_nt: bool,
/// Obtain a PSK using the relay config client.
- #[cfg_attr(
- target_os = "android",
- jnix(map = "|state| match state {
- QuantumResistantState::Auto => None,
- QuantumResistantState::On => Some(true),
- QuantumResistantState::Off => Some(false),
- }")
- )]
pub quantum_resistant: QuantumResistantState,
/// Interval used for automatic key rotation
#[cfg_attr(target_os = "android", jnix(skip))]