From 5e6917c7d508c4e8f75989be520289ce42092854 Mon Sep 17 00:00:00 2001
From: Daniel Gultsch <daniel@gultsch.de>
Date: Tue, 26 Jan 2016 22:46:00 +0100
Subject: [PATCH] prefer dns servers from networsk with the default route

---
 .../siacs/conversations/utils/DNSHelper.java  | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

diff --git a/src/main/java/eu/siacs/conversations/utils/DNSHelper.java b/src/main/java/eu/siacs/conversations/utils/DNSHelper.java
index 87790d64..306d50c2 100644
--- a/src/main/java/eu/siacs/conversations/utils/DNSHelper.java
+++ b/src/main/java/eu/siacs/conversations/utils/DNSHelper.java
@@ -5,6 +5,7 @@ import android.content.Context;
 import android.net.ConnectivityManager;
 import android.net.LinkProperties;
 import android.net.Network;
+import android.net.RouteInfo;
 import android.os.Build;
 import android.os.Bundle;
 import android.os.Parcelable;
@@ -75,15 +76,29 @@ public class DNSHelper {
 		for(int i = 0; i < networks.length; ++i) {
 			LinkProperties linkProperties = connectivityManager.getLinkProperties(networks[i]);
 			if (linkProperties != null) {
-				servers.addAll(linkProperties.getDnsServers());
+				if (hasDefaultRoute(linkProperties)) {
+					servers.addAll(0, linkProperties.getDnsServers());
+				} else {
+					servers.addAll(linkProperties.getDnsServers());
+				}
 			}
 		}
 		if (servers.size() > 0) {
-			Log.d(Config.LOGTAG,"used lollipop variant to discover dns servers in "+networks.length+" networks");
+			Log.d(Config.LOGTAG, "used lollipop variant to discover dns servers in " + networks.length + " networks");
 		}
 		return servers.size() > 0 ? servers : getDnsServersPreLollipop();
 	}
 
+	@TargetApi(Build.VERSION_CODES.LOLLIPOP)
+	private static boolean hasDefaultRoute(LinkProperties linkProperties) {
+		for(RouteInfo route: linkProperties.getRoutes()) {
+			if (route.isDefaultRoute()) {
+				return true;
+			}
+		}
+		return false;
+	}
+
 	private static List<InetAddress> getDnsServersPreLollipop() {
 		List<InetAddress> servers = new ArrayList<>();
 		String[] dns = client.findDNS();