summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/CustomDnsOptions.kt10
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/DefaultDnsOptions.kt13
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/DnsOptions.kt7
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/DnsState.kt6
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/CustomDns.kt14
-rw-r--r--android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/CustomDns.kt5
-rw-r--r--mullvad-jni/src/classes.rs3
-rw-r--r--mullvad-types/src/settings/dns.rs54
-rw-r--r--mullvad-types/src/settings/mod.rs3
9 files changed, 58 insertions, 57 deletions
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/CustomDnsOptions.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/CustomDnsOptions.kt
new file mode 100644
index 0000000000..e9e8311c26
--- /dev/null
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/CustomDnsOptions.kt
@@ -0,0 +1,10 @@
+package net.mullvad.mullvadvpn.model
+
+import android.os.Parcelable
+import java.net.InetAddress
+import kotlinx.parcelize.Parcelize
+
+@Parcelize
+data class CustomDnsOptions(
+ val addresses: ArrayList<InetAddress>
+) : Parcelable
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/DefaultDnsOptions.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/DefaultDnsOptions.kt
new file mode 100644
index 0000000000..6b24f363cc
--- /dev/null
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/DefaultDnsOptions.kt
@@ -0,0 +1,13 @@
+package net.mullvad.mullvadvpn.model
+
+import android.os.Parcelable
+import kotlinx.parcelize.Parcelize
+
+@Parcelize
+data class DefaultDnsOptions(
+ val blockAds: Boolean = false,
+ val blockTrackers: Boolean = false,
+ val blockMalware: Boolean = false,
+ val blockAdultContent: Boolean = false,
+ val blockGambling: Boolean = false,
+) : Parcelable
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/DnsOptions.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/DnsOptions.kt
index c94075cc8b..1ce3acc095 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/DnsOptions.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/DnsOptions.kt
@@ -1,8 +1,11 @@
package net.mullvad.mullvadvpn.model
import android.os.Parcelable
-import java.net.InetAddress
import kotlinx.parcelize.Parcelize
@Parcelize
-data class DnsOptions(val custom: Boolean, val addresses: ArrayList<InetAddress>) : Parcelable
+data class DnsOptions(
+ val state: DnsState,
+ val defaultOptions: DefaultDnsOptions,
+ val customOptions: CustomDnsOptions
+) : Parcelable
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/DnsState.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/DnsState.kt
new file mode 100644
index 0000000000..9c8677ba7d
--- /dev/null
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/model/DnsState.kt
@@ -0,0 +1,6 @@
+package net.mullvad.mullvadvpn.model
+
+enum class DnsState {
+ Default,
+ Custom
+}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/CustomDns.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/CustomDns.kt
index b708e1b290..b2ae560450 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/CustomDns.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/service/endpoint/CustomDns.kt
@@ -8,7 +8,10 @@ import kotlinx.coroutines.channels.ClosedReceiveChannelException
import kotlinx.coroutines.channels.actor
import kotlinx.coroutines.channels.trySendBlocking
import net.mullvad.mullvadvpn.ipc.Request
+import net.mullvad.mullvadvpn.model.CustomDnsOptions
+import net.mullvad.mullvadvpn.model.DefaultDnsOptions
import net.mullvad.mullvadvpn.model.DnsOptions
+import net.mullvad.mullvadvpn.model.DnsState
class CustomDns(private val endpoint: ServiceEndpoint) {
private sealed class Command {
@@ -29,9 +32,9 @@ class CustomDns(private val endpoint: ServiceEndpoint) {
init {
endpoint.settingsListener.dnsOptionsNotifier.subscribe(this) { maybeDnsOptions ->
maybeDnsOptions?.let { dnsOptions ->
- enabled = dnsOptions.custom
+ enabled = dnsOptions.state == DnsState.Custom
dnsServers.clear()
- dnsServers.addAll(dnsOptions.addresses)
+ dnsServers.addAll(dnsOptions.customOptions.addresses)
}
}
@@ -106,8 +109,11 @@ class CustomDns(private val endpoint: ServiceEndpoint) {
}
private suspend fun changeDnsOptions(enable: Boolean) {
- val options = DnsOptions(enable, dnsServers)
-
+ val options = DnsOptions(
+ state = if (enable) DnsState.Custom else DnsState.Default,
+ customOptions = CustomDnsOptions(dnsServers),
+ defaultOptions = DefaultDnsOptions()
+ )
daemon.await().setDnsOptions(options)
}
}
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/CustomDns.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/CustomDns.kt
index 2675c1231a..8bfc53f226 100644
--- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/CustomDns.kt
+++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/ui/serviceconnection/CustomDns.kt
@@ -3,6 +3,7 @@ package net.mullvad.mullvadvpn.ui.serviceconnection
import android.os.Messenger
import java.net.InetAddress
import net.mullvad.mullvadvpn.ipc.Request
+import net.mullvad.mullvadvpn.model.DnsState
import net.mullvad.talpid.util.EventNotifier
class CustomDns(private val connection: Messenger, private val settingsListener: SettingsListener) {
@@ -13,8 +14,8 @@ class CustomDns(private val connection: Messenger, private val settingsListener:
settingsListener.dnsOptionsNotifier.subscribe(this) { maybeDnsOptions ->
maybeDnsOptions?.let { dnsOptions ->
synchronized(this) {
- onEnabledChanged.notifyIfChanged(dnsOptions.custom)
- onDnsServersChanged.notifyIfChanged(dnsOptions.addresses)
+ onEnabledChanged.notifyIfChanged(dnsOptions.state == DnsState.Custom)
+ onDnsServersChanged.notifyIfChanged(dnsOptions.customOptions.addresses)
}
}
}
diff --git a/mullvad-jni/src/classes.rs b/mullvad-jni/src/classes.rs
index 9a124f2a12..32123ebb07 100644
--- a/mullvad-jni/src/classes.rs
+++ b/mullvad-jni/src/classes.rs
@@ -8,7 +8,10 @@ pub const CLASSES: &[&str] = &[
"net/mullvad/mullvadvpn/model/AppVersionInfo",
"net/mullvad/mullvadvpn/model/Constraint$Any",
"net/mullvad/mullvadvpn/model/Constraint$Only",
+ "net/mullvad/mullvadvpn/model/DnsState",
"net/mullvad/mullvadvpn/model/DnsOptions",
+ "net/mullvad/mullvadvpn/model/CustomDnsOptions",
+ "net/mullvad/mullvadvpn/model/DefaultDnsOptions",
"net/mullvad/mullvadvpn/model/Device",
"net/mullvad/mullvadvpn/model/DeviceEvent",
"net/mullvad/mullvadvpn/model/DeviceEventCause",
diff --git a/mullvad-types/src/settings/dns.rs b/mullvad-types/src/settings/dns.rs
index 2fbde01cc2..5322fc3a8f 100644
--- a/mullvad-types/src/settings/dns.rs
+++ b/mullvad-types/src/settings/dns.rs
@@ -1,10 +1,12 @@
#[cfg(target_os = "android")]
-use jnix::{jni::objects::JObject, FromJava, IntoJava, JnixEnv};
+use jnix::{FromJava, IntoJava};
use serde::{Deserialize, Serialize};
use std::net::IpAddr;
#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize, Hash)]
#[serde(rename_all = "snake_case")]
+#[cfg_attr(target_os = "android", derive(FromJava, IntoJava))]
+#[cfg_attr(target_os = "android", jnix(package = "net.mullvad.mullvadvpn.model"))]
pub enum DnsState {
#[default]
Default,
@@ -14,61 +16,19 @@ pub enum DnsState {
/// DNS config
#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize, Hash)]
#[serde(default)]
-#[cfg_attr(target_os = "android", derive(IntoJava))]
+#[cfg_attr(target_os = "android", derive(FromJava, IntoJava))]
#[cfg_attr(target_os = "android", jnix(package = "net.mullvad.mullvadvpn.model"))]
pub struct DnsOptions {
- #[cfg_attr(target_os = "android", jnix(map = "|state| state == DnsState::Custom"))]
pub state: DnsState,
- #[cfg_attr(target_os = "android", jnix(skip))]
pub default_options: DefaultDnsOptions,
- #[cfg_attr(target_os = "android", jnix(map = "|opts| opts.addresses"))]
pub custom_options: CustomDnsOptions,
}
-#[cfg(target_os = "android")]
-#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize, Hash)]
-#[cfg_attr(target_os = "android", derive(FromJava))]
-#[cfg_attr(
- target_os = "android",
- jnix(class_name = "net.mullvad.mullvadvpn.model.DnsOptions")
-)]
-pub struct AndroidDnsOptions {
- pub custom: bool,
- pub addresses: Vec<IpAddr>,
-}
-
-#[cfg(target_os = "android")]
-impl From<AndroidDnsOptions> for DnsOptions {
- fn from(options: AndroidDnsOptions) -> Self {
- Self {
- state: if options.custom {
- DnsState::Custom
- } else {
- DnsState::Default
- },
- default_options: DefaultDnsOptions::default(),
- custom_options: CustomDnsOptions {
- addresses: options.addresses,
- },
- }
- }
-}
-
-#[cfg(target_os = "android")]
-impl<'env, 'sub_env> FromJava<'env, JObject<'sub_env>> for DnsOptions
-where
- 'env: 'sub_env,
-{
- const JNI_SIGNATURE: &'static str = "Lnet/mullvad/mullvadvpn/model/DnsOptions";
-
- fn from_java(env: &JnixEnv<'env>, object: JObject<'sub_env>) -> Self {
- AndroidDnsOptions::from_java(env, object).into()
- }
-}
-
/// Default DNS config
#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize, Hash)]
#[serde(default)]
+#[cfg_attr(target_os = "android", derive(FromJava, IntoJava))]
+#[cfg_attr(target_os = "android", jnix(package = "net.mullvad.mullvadvpn.model"))]
pub struct DefaultDnsOptions {
pub block_ads: bool,
pub block_trackers: bool,
@@ -79,6 +39,8 @@ pub struct DefaultDnsOptions {
/// Custom DNS config
#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize, Hash)]
+#[cfg_attr(target_os = "android", derive(FromJava, IntoJava))]
+#[cfg_attr(target_os = "android", jnix(package = "net.mullvad.mullvadvpn.model"))]
pub struct CustomDnsOptions {
pub addresses: Vec<IpAddr>,
}
diff --git a/mullvad-types/src/settings/mod.rs b/mullvad-types/src/settings/mod.rs
index 6704800ac5..68527b12c2 100644
--- a/mullvad-types/src/settings/mod.rs
+++ b/mullvad-types/src/settings/mod.rs
@@ -208,9 +208,6 @@ pub struct TunnelOptions {
pub use dns::{CustomDnsOptions, DefaultDnsOptions, DnsOptions, DnsState};
-#[cfg(target_os = "android")]
-pub use dns::AndroidDnsOptions;
-
impl Default for TunnelOptions {
fn default() -> Self {
TunnelOptions {