am c8f6ad36: Merge "Report Network status to NetworkAgent." into lmp-dev

* commit 'c8f6ad366accbe6bf90d30d4e2d4f924552d731a':
  Report Network status to NetworkAgent.
This commit is contained in:
Robert Greenwalt
2014-09-16 23:05:56 +00:00
committed by Android Git Automerger
3 changed files with 45 additions and 1 deletions

View File

@@ -120,6 +120,18 @@ public abstract class NetworkAgent extends Handler {
*/
public static final int EVENT_UNBLOCK_ADDRESS_FAMILY = BASE + 8;
/**
* Sent by ConnectivitySerice to the NetworkAgent to inform the agent of the
* networks status - whether we could use the network or could not, due to
* either a bad network configuration (no internet link) or captive portal.
*
* arg1 = either {@code VALID_NETWORK} or {@code INVALID_NETWORK}
*/
public static final int CMD_REPORT_NETWORK_STATUS = BASE + 9;
public static final int VALID_NETWORK = 1;
public static final int INVALID_NETWORK = 2;
public NetworkAgent(Looper looper, Context context, String logTag, NetworkInfo ni,
NetworkCapabilities nc, LinkProperties lp, int score) {
this(looper, context, logTag, ni, nc, lp, score, null);
@@ -181,6 +193,14 @@ public abstract class NetworkAgent extends Handler {
log("Unhandled Message " + msg);
break;
}
case CMD_REPORT_NETWORK_STATUS: {
if (VDBG) {
log("CMD_REPORT_NETWORK_STATUS(" +
(msg.arg1 == VALID_NETWORK ? "VALID)" : "INVALID)"));
}
networkStatus(msg.arg1);
break;
}
}
}
@@ -268,6 +288,24 @@ public abstract class NetworkAgent extends Handler {
*/
abstract protected void unwanted();
/**
* Called when the system determines the usefulness of this network.
*
* Networks claiming internet connectivity will have their internet
* connectivity verified.
*
* Currently there are two possible values:
* {@code VALID_NETWORK} if the system is happy with the connection,
* {@code INVALID_NETWORK} if the system is not happy.
* TODO - add indications of captive portal-ness and related success/failure,
* ie, CAPTIVE_SUCCESS_NETWORK, CAPTIVE_NETWORK for successful login and detection
*
* This may be called multiple times as the network status changes and may
* generate false negatives if we lose ip connectivity before the link is torn down.
*/
protected void networkStatus(int status) {
}
protected void log(String s) {
Log.d(LOG_TAG, "NetworkAgent: " + s);
}

View File

@@ -1935,6 +1935,11 @@ public class ConnectivityService extends IConnectivityManager.Stub {
rematchNetworkAndRequests(nai);
}
updateInetCondition(nai, valid);
// Let the NetworkAgent know the state of its network
nai.asyncChannel.sendMessage(
android.net.NetworkAgent.CMD_REPORT_NETWORK_STATUS,
(valid ? NetworkAgent.VALID_NETWORK : NetworkAgent.INVALID_NETWORK),
0, null);
}
break;
}
@@ -2517,6 +2522,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
nai = mNetworkForNetId.get(network.netId);
}
if (nai == null) return;
if (DBG) log("reportBadNetwork(" + nai.name() + ") by " + uid);
synchronized (nai) {
if (isNetworkBlocked(nai, uid)) return;

View File

@@ -260,7 +260,7 @@ public class NetworkMonitor extends StateMachine {
addState(mUserPromptedState, mDefaultState);
addState(mCaptivePortalState, mDefaultState);
addState(mLingeringState, mDefaultState);
setInitialState(mOfflineState);
setInitialState(mDefaultState);
mServer = Settings.Global.getString(mContext.getContentResolver(),
Settings.Global.CAPTIVE_PORTAL_SERVER);