Merge "Support disconnecting while trying to connect."

This commit is contained in:
Lorenzo Colitti
2014-05-28 07:40:49 +00:00
committed by Android (Google) Code Review

View File

@@ -257,31 +257,43 @@ public abstract class NetworkAgent extends Handler {
}
/**
* called to go through our list of requests and see if we're
* good enough to try connecting.
* Called to go through our list of requests and see if we're
* good enough to try connecting, or if we have gotten worse and
* need to disconnect.
*
* Only does connects - we disconnect when requested via
* Once we are registered, does nothing: we disconnect when requested via
* CMD_CHANNEL_DISCONNECTED, generated by either a loss of connection
* between modules (bearer or ConnectivityService dies) or more commonly
* when the NetworkInfo reports to ConnectivityService it is disconnected.
*/
private void evalScores() {
if (mConnectionRequested) {
if (VDBG) log("evalScores - already trying - size=" + mNetworkRequests.size());
// already trying
return;
}
if (VDBG) log("evalScores!");
for (int i=0; i < mNetworkRequests.size(); i++) {
int score = mNetworkRequests.valueAt(i).score;
if (VDBG) log(" checking request Min " + score + " vs my score " + mNetworkScore);
if (score < mNetworkScore) {
// have a request that has a lower scored network servicing it
// (or no network) than we could provide, so lets connect!
mConnectionRequested = true;
connect();
synchronized(mLockObj) {
if (mRegistered) {
if (VDBG) log("evalScores - already connected - size=" + mNetworkRequests.size());
// already trying
return;
}
if (VDBG) log("evalScores!");
for (int i=0; i < mNetworkRequests.size(); i++) {
int score = mNetworkRequests.valueAt(i).score;
if (VDBG) log(" checking request Min " + score + " vs my score " + mNetworkScore);
if (score < mNetworkScore) {
// have a request that has a lower scored network servicing it
// (or no network) than we could provide, so let's connect!
mConnectionRequested = true;
connect();
return;
}
}
// Our score is not high enough to satisfy any current request.
// This can happen if our score goes down after a connection is
// requested but before we actually connect. In this case, disconnect
// rather than continue trying - there's no point connecting if we know
// we'll just be torn down as soon as we do.
if (mConnectionRequested) {
mConnectionRequested = false;
disconnect();
}
}
}