diff options
| author | Arne Schwabe <arne@rfc2549.org> | 2025-01-31 15:56:07 +0100 |
|---|---|---|
| committer | Arne Schwabe <arne@rfc2549.org> | 2025-02-05 14:39:57 +0100 |
| commit | 7afc93296a80e7857cf9e31a9be46902b7f1eedc (patch) | |
| tree | 8f53e7d886c3a6385990b7e49a266bdf6d693144 /main/src/ui/java | |
| parent | 68068ea5abc4d5b70505ee9a50651809eddc1133 (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.java | 72 |
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); |
