diff options
author | Paul Jensen <pauljensen@google.com> | 2014-08-29 09:54:01 -0400 |
---|---|---|
committer | Paul Jensen <pauljensen@google.com> | 2014-09-04 12:02:52 -0400 |
commit | 7ccd3dfd53d8d45c447398ff137f052865dfd3b3 (patch) | |
tree | cf8c6cf7ff5ecc018132ae2b324e360afc7528a0 /services/core/java/com/android/server/connectivity/NetworkMonitor.java | |
parent | 9897c73f12fb8bed7a46069e7142aaaa28d71f83 (diff) | |
download | frameworks_base-7ccd3dfd53d8d45c447398ff137f052865dfd3b3.zip frameworks_base-7ccd3dfd53d8d45c447398ff137f052865dfd3b3.tar.gz frameworks_base-7ccd3dfd53d8d45c447398ff137f052865dfd3b3.tar.bz2 |
Implement ConnectivityManager.reportBadNetwork() to trigger network validation.
Network traffic used to perform the network validation is billed to the UID of
the caller of reportBadNetwork. This change does not change the actions taken
upon validation failing or succeeding: NetworkMonitor will show the sign-in
notification if a captive portal is found. NetworkMonitor will inform
ConnectivityService if a network tests functional. NetworkMonitor will not
take action if a network lacks any connectivity.
Also, remove an unused Thread that was confusing bandwidth billing.
bug:17326268
Change-Id: I7fea23480af54211004a0a1c535a71c2793f21bb
Diffstat (limited to 'services/core/java/com/android/server/connectivity/NetworkMonitor.java')
-rw-r--r-- | services/core/java/com/android/server/connectivity/NetworkMonitor.java | 59 |
1 files changed, 26 insertions, 33 deletions
diff --git a/services/core/java/com/android/server/connectivity/NetworkMonitor.java b/services/core/java/com/android/server/connectivity/NetworkMonitor.java index cedf573..2d8adc1 100644 --- a/services/core/java/com/android/server/connectivity/NetworkMonitor.java +++ b/services/core/java/com/android/server/connectivity/NetworkMonitor.java @@ -26,6 +26,7 @@ import android.net.ConnectivityManager; import android.net.Network; import android.net.NetworkCapabilities; import android.net.NetworkInfo; +import android.net.TrafficStats; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Handler; @@ -139,34 +140,28 @@ public class NetworkMonitor extends StateMachine { private static final int CMD_REEVALUATE = BASE + 6; /** - * Message to self indicating network evaluation is complete. - * arg1 = Token to ignore old messages. - * arg2 = HTTP response code of network evaluation. - */ - private static final int EVENT_REEVALUATION_COMPLETE = BASE + 7; - - /** * Inform NetworkMonitor that the network has disconnected. */ - public static final int CMD_NETWORK_DISCONNECTED = BASE + 8; + public static final int CMD_NETWORK_DISCONNECTED = BASE + 7; /** * Force evaluation even if it has succeeded in the past. + * arg1 = UID responsible for requesting this reeval. Will be billed for data. */ - public static final int CMD_FORCE_REEVALUATION = BASE + 9; + public static final int CMD_FORCE_REEVALUATION = BASE + 8; /** * Message to self indicating captive portal login is complete. * arg1 = Token to ignore old messages. * arg2 = 1 if we should use this network, 0 otherwise. */ - private static final int CMD_CAPTIVE_PORTAL_LOGGED_IN = BASE + 10; + private static final int CMD_CAPTIVE_PORTAL_LOGGED_IN = BASE + 9; /** * Message to self indicating user desires to log into captive portal. * arg1 = Token to ignore old messages. */ - private static final int CMD_USER_WANTS_SIGN_IN = BASE + 11; + private static final int CMD_USER_WANTS_SIGN_IN = BASE + 10; /** * Request ConnectivityService display provisioning notification. @@ -174,22 +169,22 @@ public class NetworkMonitor extends StateMachine { * arg2 = NetID. * obj = Intent to be launched when notification selected by user, null if !arg1. */ - public static final int EVENT_PROVISIONING_NOTIFICATION = BASE + 12; + public static final int EVENT_PROVISIONING_NOTIFICATION = BASE + 11; /** * Message to self indicating sign-in app bypassed captive portal. */ - private static final int EVENT_APP_BYPASSED_CAPTIVE_PORTAL = BASE + 13; + private static final int EVENT_APP_BYPASSED_CAPTIVE_PORTAL = BASE + 12; /** * Message to self indicating no sign-in app responded. */ - private static final int EVENT_NO_APP_RESPONSE = BASE + 14; + private static final int EVENT_NO_APP_RESPONSE = BASE + 13; /** * Message to self indicating sign-in app indicates sign-in is not possible. */ - private static final int EVENT_APP_INDICATES_SIGN_IN_IMPOSSIBLE = BASE + 15; + private static final int EVENT_APP_INDICATES_SIGN_IN_IMPOSSIBLE = BASE + 14; private static final String LINGER_DELAY_PROPERTY = "persist.netmon.linger"; // Default to 30s linger time-out. @@ -204,6 +199,8 @@ public class NetworkMonitor extends StateMachine { private static final int MAX_RETRIES = 10; private final int mReevaluateDelayMs; private int mReevaluateToken = 0; + private static final int INVALID_UID = -1; + private int mUidResponsibleForReeval = INVALID_UID; private int mCaptivePortalLoggedInToken = 0; private int mUserPromptedToken = 0; @@ -279,6 +276,7 @@ public class NetworkMonitor extends StateMachine { return HANDLED; case CMD_FORCE_REEVALUATION: if (DBG) log("Forcing reevaluation"); + mUidResponsibleForReeval = message.arg1; transitionTo(mEvaluatingState); return HANDLED; default: @@ -319,20 +317,14 @@ public class NetworkMonitor extends StateMachine { private class EvaluatingState extends State { private int mRetries; - private class EvaluateInternetConnectivity extends Thread { - private int mToken; - EvaluateInternetConnectivity(int token) { - mToken = token; - } - public void run() { - sendMessage(EVENT_REEVALUATION_COMPLETE, mToken, isCaptivePortal()); - } - } - @Override public void enter() { mRetries = 0; sendMessage(CMD_REEVALUATE, ++mReevaluateToken, 0); + if (mUidResponsibleForReeval != INVALID_UID) { + TrafficStats.setThreadStatsUid(mUidResponsibleForReeval); + mUidResponsibleForReeval = INVALID_UID; + } } @Override @@ -353,14 +345,7 @@ public class NetworkMonitor extends StateMachine { transitionTo(mValidatedState); return HANDLED; } - // Kick off a thread to perform internet connectivity evaluation. - Thread thread = new EvaluateInternetConnectivity(mReevaluateToken); - thread.run(); - return HANDLED; - case EVENT_REEVALUATION_COMPLETE: - if (message.arg1 != mReevaluateToken) - return HANDLED; - int httpResponseCode = message.arg2; + int httpResponseCode = isCaptivePortal(); if (httpResponseCode == 204) { transitionTo(mValidatedState); } else if (httpResponseCode >= 200 && httpResponseCode <= 399) { @@ -372,10 +357,18 @@ public class NetworkMonitor extends StateMachine { sendMessageDelayed(msg, mReevaluateDelayMs); } return HANDLED; + case CMD_FORCE_REEVALUATION: + // Ignore duplicate requests. + return HANDLED; default: return NOT_HANDLED; } } + + @Override + public void exit() { + TrafficStats.clearThreadStatsUid(); + } } private class UserPromptedState extends State { |