summaryrefslogtreecommitdiff
path: root/main/src/ui/java
diff options
context:
space:
mode:
authorArne Schwabe <arne@rfc2549.org>2025-01-31 15:56:07 +0100
committerArne Schwabe <arne@rfc2549.org>2025-02-05 14:39:57 +0100
commit7afc93296a80e7857cf9e31a9be46902b7f1eedc (patch)
tree8f53e7d886c3a6385990b7e49a266bdf6d693144 /main/src/ui/java
parent68068ea5abc4d5b70505ee9a50651809eddc1133 (diff)
Update OpenVPN 3.x core and implement logic to support --dns
Diffstat (limited to 'main/src/ui/java')
-rw-r--r--main/src/ui/java/de/blinkt/openvpn/core/OpenVPNThreadv3.java72
1 files changed, 57 insertions, 15 deletions
diff --git a/main/src/ui/java/de/blinkt/openvpn/core/OpenVPNThreadv3.java b/main/src/ui/java/de/blinkt/openvpn/core/OpenVPNThreadv3.java
index e4d6b32f..3c21e46c 100644
--- a/main/src/ui/java/de/blinkt/openvpn/core/OpenVPNThreadv3.java
+++ b/main/src/ui/java/de/blinkt/openvpn/core/OpenVPNThreadv3.java
@@ -1,12 +1,8 @@
package de.blinkt.openvpn.core;
-import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Handler;
import android.os.HandlerThread;
-import android.os.Looper;
-import android.os.Message;
-import android.provider.Settings;
import android.text.TextUtils;
import net.openvpn.ovpn3.ClientAPI_Config;
@@ -20,16 +16,22 @@ import net.openvpn.ovpn3.ClientAPI_OpenVPNClientHelper;
import net.openvpn.ovpn3.ClientAPI_ProvideCreds;
import net.openvpn.ovpn3.ClientAPI_Status;
import net.openvpn.ovpn3.ClientAPI_TransportStats;
+import net.openvpn.ovpn3.DnsAddress;
+import net.openvpn.ovpn3.DnsDomain;
+import net.openvpn.ovpn3.DnsOptions;
+import net.openvpn.ovpn3.DnsOptions_ServersMap;
+import net.openvpn.ovpn3.DnsServer;
import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeMap;
import de.blinkt.openvpn.R;
import de.blinkt.openvpn.VpnProfile;
import static de.blinkt.openvpn.VpnProfile.AUTH_RETRY_NOINTERACT;
-import androidx.annotation.NonNull;
-
public class OpenVPNThreadv3 extends ClientAPI_OpenVPNClient implements Runnable, OpenVPNManagement {
final static long EmulateExcludeRoutes = (1 << 16);
@@ -84,10 +86,56 @@ public class OpenVPNThreadv3 extends ClientAPI_OpenVPNClient implements Runnable
return true;
}
+
@Override
- public boolean tun_builder_add_dns_server(String address, boolean ipv6) {
- mService.addDNS(address);
- return true;
+ public boolean tun_builder_set_dns_options(DnsOptions dns)
+ {
+ boolean dnsadded = false;
+ for(DnsDomain domain:dns.getSearch_domains()) {
+ mService.addSearchDomain(domain.getDomain());
+ }
+
+ /* sort dns server if the provided map is not sorted */
+ TreeMap<Integer, DnsServer> sortedDNSServers = new TreeMap<>(dns.getServers());
+
+ for (Map.Entry<Integer, DnsServer> dnsServerEntry: sortedDNSServers.entrySet() ) {
+ DnsServer server = dnsServerEntry.getValue();
+ int prio = dnsServerEntry.getKey();
+
+ if (DnsServer.Security.Yes.equals(server.getDnssec()))
+ {
+ VpnStatus.logInfo(R.string.dnsserver_ignore_dnnsec, prio, server.to_string().trim());
+ continue;
+ }
+
+ if (!DnsServer.Transport.Plain.equals(server.getTransport()) &&
+ !DnsServer.Transport.Unset.equals(server.getTransport()))
+ {
+ VpnStatus.logInfo(R.string.dnsserver_ignore_tls_doh, prio, server.to_string().trim());
+ continue;
+ }
+
+ for(DnsAddress address: server.getAddresses())
+ {
+ if (address.getPort() == 0 || address.getPort() == 53) {
+ mService.addDNS(address.getAddress());
+ dnsadded = true;
+ }
+ else
+ {
+ VpnStatus.logInfo(R.string.dnsserver_ignore_dnsport,
+ address.getAddress(), address.getPort(), prio, server.to_string().trim());
+ }
+ }
+ /* We apply only the first DNS priority that works for us, so skip the rest after
+ * applying one */
+ if (dnsadded)
+ return true;
+
+ }
+ VpnStatus.logError(R.string.dnsserver_no_valid_server);
+ stopVPN(false);
+ return false;
}
@Override
@@ -114,12 +162,6 @@ public class OpenVPNThreadv3 extends ClientAPI_OpenVPNClient implements Runnable
}
@Override
- public boolean tun_builder_add_search_domain(String domain) {
- mService.setDomain(domain);
- return true;
- }
-
- @Override
public boolean tun_builder_set_proxy_http(String host, int port)
{
return mService.addHttpProxy(host, port);