Added option to specify extra DNS server addresses

This commit is contained in:
M66B
2024-01-05 17:31:48 +01:00
parent 12828f983f
commit cc862f6955
4 changed files with 95 additions and 25 deletions

View File

@@ -20,6 +20,7 @@ package eu.faircode.email;
*/
import android.content.Context;
import android.content.SharedPreferences;
import android.net.ConnectivityManager;
import android.net.DnsResolver;
import android.net.LinkProperties;
@@ -28,6 +29,7 @@ import android.os.Build;
import android.text.TextUtils;
import androidx.annotation.NonNull;
import androidx.preference.PreferenceManager;
import org.minidns.AbstractDnsClient;
import org.minidns.DnsClient;
@@ -328,29 +330,6 @@ public class DnsHelper {
}
}
private static List<String> getDnsServers(Context context) {
List<String> result = new ArrayList<>();
result.add(DEFAULT_DNS);
ConnectivityManager cm = Helper.getSystemService(context, ConnectivityManager.class);
if (cm == null)
return result;
Network active = ConnectionHelper.getActiveNetwork(context);
if (active == null)
return result;
LinkProperties props = cm.getLinkProperties(active);
if (props == null)
return result;
List<InetAddress> dns = props.getDnsServers();
for (int i = 0; i < dns.size(); i++)
result.add(i, dns.get(i).getHostAddress());
return result;
}
static InetAddress getByName(Context context, String host) throws UnknownHostException {
return InetAddress.getByName(host);
}
@@ -384,6 +363,49 @@ public class DnsHelper {
throw new CertificateException("DANE missing or invalid");
}
private static List<String> getDnsServers(Context context) {
List<String> result = new ArrayList<>();
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
String dns_extra = prefs.getString("dns_extra", null);
if (TextUtils.isEmpty(dns_extra))
return result;
String[] extras = dns_extra.replaceAll("\\s+", "").split(",");
for (String extra : extras)
if (ConnectionHelper.isNumericAddress(extra))
result.add(extra);
else
Log.w("DNS extra invalid=" + extra);
result.addAll(_getDnsServers(context));
return result;
}
private static List<String> _getDnsServers(Context context) {
List<String> result = new ArrayList<>();
result.add(DEFAULT_DNS);
ConnectivityManager cm = Helper.getSystemService(context, ConnectivityManager.class);
if (cm == null)
return result;
Network active = ConnectionHelper.getActiveNetwork(context);
if (active == null)
return result;
LinkProperties props = cm.getLinkProperties(active);
if (props == null)
return result;
List<InetAddress> dns = props.getDnsServers();
for (int i = 0; i < dns.size(); i++)
result.add(i, dns.get(i).getHostAddress());
return result;
}
static void test(Context context) throws UnknownHostException {
test(context, "gmail.com", "ns");
test(context, "gmail.com", "mx");