diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2009-01-20 14:03:58 -0800 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-01-20 14:03:58 -0800 |
commit | 22f7dfd23490a3de2f21ff96949ba47003aac8f8 (patch) | |
tree | 41bc290bb2f1f08a0e37cfda4955742a85d42ecf /services/java/com/android/server/WifiWatchdogService.java | |
parent | 9266c558bf1d21ff647525ff99f7dadbca417309 (diff) | |
download | frameworks_base-22f7dfd23490a3de2f21ff96949ba47003aac8f8.zip frameworks_base-22f7dfd23490a3de2f21ff96949ba47003aac8f8.tar.gz frameworks_base-22f7dfd23490a3de2f21ff96949ba47003aac8f8.tar.bz2 |
auto import from //branches/cupcake/...@127101
Diffstat (limited to 'services/java/com/android/server/WifiWatchdogService.java')
-rw-r--r-- | services/java/com/android/server/WifiWatchdogService.java | 74 |
1 files changed, 60 insertions, 14 deletions
diff --git a/services/java/com/android/server/WifiWatchdogService.java b/services/java/com/android/server/WifiWatchdogService.java index 9578c2e..fe97b93 100644 --- a/services/java/com/android/server/WifiWatchdogService.java +++ b/services/java/com/android/server/WifiWatchdogService.java @@ -23,6 +23,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.database.ContentObserver; import android.net.NetworkInfo; +import android.net.DhcpInfo; import android.net.wifi.ScanResult; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; @@ -30,7 +31,6 @@ import android.net.wifi.WifiStateTracker; import android.os.Handler; import android.os.Looper; import android.os.Message; -import android.os.SystemProperties; import android.provider.Settings; import android.text.TextUtils; import android.util.Config; @@ -241,6 +241,15 @@ public class WifiWatchdogService { return Settings.Secure.getInt(mContentResolver, Settings.Secure.WIFI_WATCHDOG_BACKGROUND_CHECK_TIMEOUT_MS, 1000); } + + /** + * @see android.provider.Settings.Secure#WIFI_WATCHDOG_WATCH_LIST + * @return the comma-separated list of SSIDs + */ + private String getWatchList() { + return Settings.Secure.getString(mContentResolver, + Settings.Secure.WIFI_WATCHDOG_WATCH_LIST); + } /** * Registers to receive the necessary Wi-Fi broadcasts. @@ -304,8 +313,13 @@ public class WifiWatchdogService { * * @return The DNS of the current AP. */ - private static String getDns() { - return SystemProperties.get(SYSTEMPROPERTY_KEY_DNS); + private int getDns() { + DhcpInfo addressInfo = mWifiManager.getDhcpInfo(); + if (addressInfo != null) { + return addressInfo.dns1; + } else { + return -1; + } } /** @@ -315,18 +329,19 @@ public class WifiWatchdogService { * @return Whether the DNS is reachable */ private boolean checkDnsConnectivity() { - String dns = getDns(); - if (V) { - myLogV("checkDnsConnectivity: Checking " + dns + " for connectivity"); - } - - if (TextUtils.isEmpty(dns)) { + int dns = getDns(); + if (dns == -1) { if (V) { myLogV("checkDnsConnectivity: Invalid DNS, returning false"); } return false; } + if (V) { + myLogV("checkDnsConnectivity: Checking 0x" + + Integer.toHexString(Integer.reverseBytes(dns)) + " for connectivity"); + } + int numInitialIgnoredPings = getInitialIgnoredPingCount(); int numPings = getPingCount(); int pingDelay = getPingDelayMs(); @@ -403,13 +418,13 @@ public class WifiWatchdogService { } private boolean backgroundCheckDnsConnectivity() { - String dns = getDns(); + int dns = getDns(); if (false && V) { myLogV("backgroundCheckDnsConnectivity: Background checking " + dns + " for connectivity"); } - if (TextUtils.isEmpty(dns)) { + if (dns == -1) { if (V) { myLogV("backgroundCheckDnsConnectivity: DNS is empty, returning false"); } @@ -557,7 +572,14 @@ public class WifiWatchdogService { return false; } } - + + if (!isOnWatchList(ssid)) { + if (V) { + Log.v(TAG, " SSID not on watch list, returning false"); + } + return false; + } + // The watchdog only monitors networks with multiple APs if (!hasRequiredNumberOfAps(ssid)) { return false; @@ -565,6 +587,24 @@ public class WifiWatchdogService { return true; } + + private boolean isOnWatchList(String ssid) { + String watchList; + + if (ssid == null || (watchList = getWatchList()) == null) { + return false; + } + + String[] list = watchList.split(" *, *"); + + for (String name : list) { + if (ssid.equals(name)) { + return true; + } + } + + return false; + } /** * Checks if the current scan results have multiple access points with an SSID. @@ -1180,7 +1220,7 @@ public class WifiWatchdogService { /** Used to generate IDs */ private static Random sRandom = new Random(); - static boolean isDnsReachable(String dns, int timeout) { + static boolean isDnsReachable(int dns, int timeout) { try { DatagramSocket socket = new DatagramSocket(); @@ -1191,7 +1231,13 @@ public class WifiWatchdogService { fillQuery(buf); // Send the DNS query - InetAddress dnsAddress = InetAddress.getByName(dns); + byte parts[] = new byte[4]; + parts[0] = (byte)(dns & 0xff); + parts[1] = (byte)((dns >> 8) & 0xff); + parts[2] = (byte)((dns >> 16) & 0xff); + parts[3] = (byte)((dns >> 24) & 0xff); + + InetAddress dnsAddress = InetAddress.getByAddress(parts); DatagramPacket packet = new DatagramPacket(buf, buf.length, dnsAddress, DNS_PORT); socket.send(packet); |