Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 310d1dac authored by Lorenzo Colitti's avatar Lorenzo Colitti Committed by Gerrit Code Review
Browse files

Merge changes I7ea39b80,I6b9979f3

* changes:
  Address comments on ag/10050681.
  Stop using NetworkFactory in connectivity code.
parents 13631a1f 0153955e
Loading
Loading
Loading
Loading
+3 −7
Original line number Diff line number Diff line
@@ -3121,8 +3121,6 @@ public class ConnectivityManager {
    @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY)
    public int registerNetworkProvider(@NonNull NetworkProvider provider) {
        if (provider.getProviderId() != NetworkProvider.ID_NONE) {
            // TODO: Provide a better method for checking this by moving NetworkFactory.SerialNumber
            // out of NetworkFactory.
            throw new IllegalStateException("NetworkProviders can only be registered once");
        }

@@ -3176,8 +3174,7 @@ public class ConnectivityManager {
    @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY)
    public int registerNetworkAgent(Messenger messenger, NetworkInfo ni, LinkProperties lp,
            NetworkCapabilities nc, int score, NetworkMisc misc) {
        return registerNetworkAgent(messenger, ni, lp, nc, score, misc,
                NetworkFactory.SerialNumber.NONE);
        return registerNetworkAgent(messenger, ni, lp, nc, score, misc, NetworkProvider.ID_NONE);
    }

    /**
@@ -3187,10 +3184,9 @@ public class ConnectivityManager {
     */
    @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY)
    public int registerNetworkAgent(Messenger messenger, NetworkInfo ni, LinkProperties lp,
            NetworkCapabilities nc, int score, NetworkMisc misc, int factorySerialNumber) {
            NetworkCapabilities nc, int score, NetworkMisc misc, int providerId) {
        try {
            return mService.registerNetworkAgent(messenger, ni, lp, nc, score, misc,
                    factorySerialNumber);
            return mService.registerNetworkAgent(messenger, ni, lp, nc, score, misc, providerId);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
+8 −9
Original line number Diff line number Diff line
@@ -58,7 +58,7 @@ public abstract class NetworkAgent extends Handler {
    private static final long BW_REFRESH_MIN_WIN_MS = 500;
    private boolean mPollLceScheduled = false;
    private AtomicBoolean mPollLcePending = new AtomicBoolean(false);
    public final int mFactorySerialNumber;
    public final int mProviderId;

    private static final int BASE = Protocol.BASE_NETWORK_AGENT;

@@ -219,25 +219,25 @@ public abstract class NetworkAgent extends Handler {
    // the entire tree.
    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, NetworkFactory.SerialNumber.NONE);
        this(looper, context, logTag, ni, nc, lp, score, null, NetworkProvider.ID_NONE);
    }
    public NetworkAgent(Looper looper, Context context, String logTag, NetworkInfo ni,
            NetworkCapabilities nc, LinkProperties lp, int score, NetworkMisc misc) {
        this(looper, context, logTag, ni, nc, lp, score, misc, NetworkFactory.SerialNumber.NONE);
        this(looper, context, logTag, ni, nc, lp, score, misc, NetworkProvider.ID_NONE);
    }

    public NetworkAgent(Looper looper, Context context, String logTag, NetworkInfo ni,
            NetworkCapabilities nc, LinkProperties lp, int score, int factorySerialNumber) {
        this(looper, context, logTag, ni, nc, lp, score, null, factorySerialNumber);
            NetworkCapabilities nc, LinkProperties lp, int score, int providerId) {
        this(looper, context, logTag, ni, nc, lp, score, null, providerId);
    }

    public NetworkAgent(Looper looper, Context context, String logTag, NetworkInfo ni,
            NetworkCapabilities nc, LinkProperties lp, int score, NetworkMisc misc,
            int factorySerialNumber) {
            int providerId) {
        super(looper);
        LOG_TAG = logTag;
        mContext = context;
        mFactorySerialNumber = factorySerialNumber;
        mProviderId = providerId;
        if (ni == null || nc == null || lp == null) {
            throw new IllegalArgumentException();
        }
@@ -246,8 +246,7 @@ public abstract class NetworkAgent extends Handler {
        ConnectivityManager cm = (ConnectivityManager)mContext.getSystemService(
                Context.CONNECTIVITY_SERVICE);
        netId = cm.registerNetworkAgent(new Messenger(this), new NetworkInfo(ni),
                new LinkProperties(lp), new NetworkCapabilities(nc), score, misc,
                factorySerialNumber);
                new LinkProperties(lp), new NetworkCapabilities(nc), score, misc, providerId);
    }

    @Override
+9 −12
Original line number Diff line number Diff line
@@ -91,7 +91,7 @@ public class NetworkFactory extends Handler {
     *            with the same NetworkRequest but an updated score.
     *            Also, network conditions may change for this bearer
     *            allowing for a better score in the future.
     * msg.arg2 = the serial number of the factory currently responsible for the
     * msg.arg2 = the ID of the NetworkProvider currently responsible for the
     *            NetworkAgent handling this request, or NetworkProvider.ID_NONE if none.
     */
    public static final int CMD_REQUEST_NETWORK = BASE;
@@ -156,8 +156,8 @@ public class NetworkFactory extends Handler {
        mProvider = new NetworkProvider(mContext, NetworkFactory.this.getLooper(), LOG_TAG) {
            @Override
            public void onNetworkRequested(@NonNull NetworkRequest request, int score,
                    int servingFactoryProviderId) {
                handleAddRequest((NetworkRequest) request, score, servingFactoryProviderId);
                    int servingProviderId) {
                handleAddRequest((NetworkRequest) request, score, servingProviderId);
            }

            @Override
@@ -228,8 +228,6 @@ public class NetworkFactory extends Handler {
     *
     * @param request the request to handle.
     * @param score the score of the NetworkAgent currently satisfying this request.
     * @param servingProviderId the serial number of the NetworkFactory that
     *         created the NetworkAgent currently satisfying this request.
     */
    // TODO : remove this method. It is a stopgap measure to help sheperding a number
    // of dependent changes that would conflict throughout the automerger graph. Having this
@@ -237,7 +235,7 @@ public class NetworkFactory extends Handler {
    // the entire tree.
    @VisibleForTesting
    protected void handleAddRequest(NetworkRequest request, int score) {
        handleAddRequest(request, score, SerialNumber.NONE);
        handleAddRequest(request, score, NetworkProvider.ID_NONE);
    }

    /**
@@ -246,24 +244,23 @@ public class NetworkFactory extends Handler {
     *
     * @param request the request to handle.
     * @param score the score of the NetworkAgent currently satisfying this request.
     * @param servingProviderId the serial number of the NetworkFactory that
     *         created the NetworkAgent currently satisfying this request.
     * @param servingProviderId the ID of the NetworkProvider that created the NetworkAgent
     *        currently satisfying this request.
     */
    @VisibleForTesting
    protected void handleAddRequest(NetworkRequest request, int score,
            int servingProviderId) {
    protected void handleAddRequest(NetworkRequest request, int score, int servingProviderId) {
        NetworkRequestInfo n = mNetworkRequests.get(request.requestId);
        if (n == null) {
            if (DBG) {
                log("got request " + request + " with score " + score
                        + " and serial " + servingProviderId);
                        + " and providerId " + servingProviderId);
            }
            n = new NetworkRequestInfo(request, score, servingProviderId);
            mNetworkRequests.put(n.request.requestId, n);
        } else {
            if (VDBG) {
                log("new score " + score + " for exisiting request " + request
                        + " with serial " + servingProviderId);
                        + " and providerId " + servingProviderId);
            }
            n.score = score;
            n.providerId = servingProviderId;
+68 −67
Original line number Diff line number Diff line
@@ -366,10 +366,10 @@ public class ConnectivityService extends IConnectivityManager.Stub
    private static final int EVENT_PROXY_HAS_CHANGED = 16;

    /**
     * used internally when registering NetworkFactories
     * obj = NetworkFactoryInfo
     * used internally when registering NetworkProviders
     * obj = NetworkProviderInfo
     */
    private static final int EVENT_REGISTER_NETWORK_FACTORY = 17;
    private static final int EVENT_REGISTER_NETWORK_PROVIDER = 17;

    /**
     * used internally when registering NetworkAgents
@@ -405,10 +405,10 @@ public class ConnectivityService extends IConnectivityManager.Stub
    private static final int EVENT_RELEASE_NETWORK_REQUEST = 22;

    /**
     * used internally when registering NetworkFactories
     * used internally when registering NetworkProviders
     * obj = Messenger
     */
    private static final int EVENT_UNREGISTER_NETWORK_FACTORY = 23;
    private static final int EVENT_UNREGISTER_NETWORK_PROVIDER = 23;

    /**
     * used internally to expire a wakelock when transitioning
@@ -2387,9 +2387,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
            return;
        }

        pw.print("NetworkFactories for:");
        for (NetworkFactoryInfo nfi : mNetworkFactoryInfos.values()) {
            pw.print(" " + nfi.name);
        pw.print("NetworkProviders for:");
        for (NetworkProviderInfo npi : mNetworkProviderInfos.values()) {
            pw.print(" " + npi.name);
        }
        pw.println();
        pw.println();
@@ -2720,7 +2720,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
                        nai.lastValidated = valid;
                        nai.everValidated |= valid;
                        updateCapabilities(oldScore, nai, nai.networkCapabilities);
                        // If score has changed, rebroadcast to NetworkFactories. b/17726566
                        // If score has changed, rebroadcast to NetworkProviders. b/17726566
                        if (oldScore != nai.getCurrentScore()) sendUpdatedScoreToFactories(nai);
                        if (valid) {
                            handleFreshlyValidatedNetwork(nai);
@@ -2835,6 +2835,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
            return true;
        }

        // TODO: delete when direct use of registerNetworkFactory is no longer supported.
        private boolean maybeHandleNetworkFactoryMessage(Message msg) {
            switch (msg.what) {
                default:
@@ -3024,16 +3025,16 @@ public class ConnectivityService extends IConnectivityManager.Stub
    private void handleAsyncChannelHalfConnect(Message msg) {
        ensureRunningOnConnectivityServiceThread();
        final AsyncChannel ac = (AsyncChannel) msg.obj;
        if (mNetworkFactoryInfos.containsKey(msg.replyTo)) {
        if (mNetworkProviderInfos.containsKey(msg.replyTo)) {
            if (msg.arg1 == AsyncChannel.STATUS_SUCCESSFUL) {
                if (VDBG) log("NetworkFactory connected");
                // Finish setting up the full connection
                NetworkFactoryInfo nfi = mNetworkFactoryInfos.get(msg.replyTo);
                nfi.completeConnection();
                sendAllRequestsToFactory(nfi);
                NetworkProviderInfo npi = mNetworkProviderInfos.get(msg.replyTo);
                npi.completeConnection();
                sendAllRequestsToProvider(npi);
            } else {
                loge("Error connecting NetworkFactory");
                mNetworkFactoryInfos.remove(msg.obj);
                mNetworkProviderInfos.remove(msg.obj);
            }
        } else if (mNetworkAgentInfos.containsKey(msg.replyTo)) {
            if (msg.arg1 == AsyncChannel.STATUS_SUCCESSFUL) {
@@ -3065,8 +3066,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
        if (nai != null) {
            disconnectAndDestroyNetwork(nai);
        } else {
            NetworkFactoryInfo nfi = mNetworkFactoryInfos.remove(msg.replyTo);
            if (DBG && nfi != null) log("unregisterNetworkFactory for " + nfi.name);
            NetworkProviderInfo npi = mNetworkProviderInfos.remove(msg.replyTo);
            if (DBG && npi != null) log("unregisterNetworkFactory for " + npi.name);
        }
    }

@@ -3149,7 +3150,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
            // ip[6]tables to flush routes and remove the incoming packet mark rule, so do it
            // after we've rematched networks with requests which should make a potential
            // fallback network the default or requested a new network from the
            // NetworkFactories, so network traffic isn't interrupted for an unnecessarily
            // NetworkProviders, so network traffic isn't interrupted for an unnecessarily
            // long time.
            destroyNativeNetwork(nai);
            mDnsManager.removeNetwork(nai.network);
@@ -3412,8 +3413,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
                }
            }

            for (NetworkFactoryInfo nfi : mNetworkFactoryInfos.values()) {
                nfi.cancelRequest(nri.request);
            for (NetworkProviderInfo npi : mNetworkProviderInfos.values()) {
                npi.cancelRequest(nri.request);
            }
        } else {
            // listens don't have a singular affectedNetwork.  Check all networks to see
@@ -3848,12 +3849,12 @@ public class ConnectivityService extends IConnectivityManager.Stub
                    handleApplyDefaultProxy((ProxyInfo)msg.obj);
                    break;
                }
                case EVENT_REGISTER_NETWORK_FACTORY: {
                    handleRegisterNetworkFactory((NetworkFactoryInfo)msg.obj);
                case EVENT_REGISTER_NETWORK_PROVIDER: {
                    handleRegisterNetworkProvider((NetworkProviderInfo) msg.obj);
                    break;
                }
                case EVENT_UNREGISTER_NETWORK_FACTORY: {
                    handleUnregisterNetworkFactory((Messenger)msg.obj);
                case EVENT_UNREGISTER_NETWORK_PROVIDER: {
                    handleUnregisterNetworkProvider((Messenger) msg.obj);
                    break;
                }
                case EVENT_REGISTER_NETWORK_AGENT: {
@@ -4898,7 +4899,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
        }
    };

    private final HashMap<Messenger, NetworkFactoryInfo> mNetworkFactoryInfos = new HashMap<>();
    private final HashMap<Messenger, NetworkProviderInfo> mNetworkProviderInfos = new HashMap<>();
    private final HashMap<NetworkRequest, NetworkRequestInfo> mNetworkRequests = new HashMap<>();

    private static final int MAX_NETWORK_REQUESTS_PER_UID = 100;
@@ -4906,18 +4907,18 @@ public class ConnectivityService extends IConnectivityManager.Stub
    @GuardedBy("mUidToNetworkRequestCount")
    private final SparseIntArray mUidToNetworkRequestCount = new SparseIntArray();

    private static class NetworkFactoryInfo {
    private static class NetworkProviderInfo {
        public final String name;
        public final Messenger messenger;
        private final AsyncChannel mAsyncChannel;
        private final IBinder.DeathRecipient mDeathRecipient;
        public final int factorySerialNumber;
        public final int providerId;

        NetworkFactoryInfo(String name, Messenger messenger, AsyncChannel asyncChannel,
                int factorySerialNumber, IBinder.DeathRecipient deathRecipient) {
        NetworkProviderInfo(String name, Messenger messenger, AsyncChannel asyncChannel,
                int providerId, IBinder.DeathRecipient deathRecipient) {
            this.name = name;
            this.messenger = messenger;
            this.factorySerialNumber = factorySerialNumber;
            this.providerId = providerId;
            mAsyncChannel = asyncChannel;
            mDeathRecipient = deathRecipient;

@@ -4935,17 +4936,17 @@ public class ConnectivityService extends IConnectivityManager.Stub
                messenger.send(Message.obtain(null /* handler */, what, arg1, arg2, obj));
            } catch (RemoteException e) {
                // Remote process died. Ignore; the death recipient will remove this
                // NetworkFactoryInfo from mNetworkFactoryInfos.
                // NetworkProviderInfo from mNetworkProviderInfos.
            }
        }

        void requestNetwork(NetworkRequest request, int score, int servingSerialNumber) {
        void requestNetwork(NetworkRequest request, int score, int servingProviderId) {
            if (isLegacyNetworkFactory()) {
                mAsyncChannel.sendMessage(android.net.NetworkFactory.CMD_REQUEST_NETWORK, score,
                        servingSerialNumber, request);
                        servingProviderId, request);
            } else {
                sendMessageToNetworkProvider(NetworkProvider.CMD_REQUEST_NETWORK, score,
                            servingSerialNumber, request);
                            servingProviderId, request);
            }
        }

@@ -5358,45 +5359,45 @@ public class ConnectivityService extends IConnectivityManager.Stub
    @Override
    public int registerNetworkFactory(Messenger messenger, String name) {
        enforceNetworkFactoryPermission();
        NetworkFactoryInfo nfi = new NetworkFactoryInfo(name, messenger, new AsyncChannel(),
        NetworkProviderInfo npi = new NetworkProviderInfo(name, messenger, new AsyncChannel(),
                nextNetworkProviderId(), null /* deathRecipient */);
        mHandler.sendMessage(mHandler.obtainMessage(EVENT_REGISTER_NETWORK_FACTORY, nfi));
        return nfi.factorySerialNumber;
        mHandler.sendMessage(mHandler.obtainMessage(EVENT_REGISTER_NETWORK_PROVIDER, npi));
        return npi.providerId;
    }

    private void handleRegisterNetworkFactory(NetworkFactoryInfo nfi) {
        if (mNetworkFactoryInfos.containsKey(nfi.messenger)) {
    private void handleRegisterNetworkProvider(NetworkProviderInfo npi) {
        if (mNetworkProviderInfos.containsKey(npi.messenger)) {
            // Avoid creating duplicates. even if an app makes a direct AIDL call.
            // This will never happen if an app calls ConnectivityManager#registerNetworkProvider,
            // as that will throw if a duplicate provider is registered.
            Slog.e(TAG, "Attempt to register existing NetworkFactoryInfo "
                    + mNetworkFactoryInfos.get(nfi.messenger).name);
            Slog.e(TAG, "Attempt to register existing NetworkProviderInfo "
                    + mNetworkProviderInfos.get(npi.messenger).name);
            return;
        }

        if (DBG) log("Got NetworkFactory Messenger for " + nfi.name);
        mNetworkFactoryInfos.put(nfi.messenger, nfi);
        nfi.connect(mContext, mTrackerHandler);
        if (!nfi.isLegacyNetworkFactory()) {
        if (DBG) log("Got NetworkProvider Messenger for " + npi.name);
        mNetworkProviderInfos.put(npi.messenger, npi);
        npi.connect(mContext, mTrackerHandler);
        if (!npi.isLegacyNetworkFactory()) {
            // Legacy NetworkFactories get their requests when their AsyncChannel connects.
            sendAllRequestsToFactory(nfi);
            sendAllRequestsToProvider(npi);
        }
    }

    @Override
    public int registerNetworkProvider(Messenger messenger, String name) {
        enforceNetworkFactoryPermission();
        NetworkFactoryInfo nfi = new NetworkFactoryInfo(name, messenger,
        NetworkProviderInfo npi = new NetworkProviderInfo(name, messenger,
                null /* asyncChannel */, nextNetworkProviderId(),
                () -> unregisterNetworkProvider(messenger));
        mHandler.sendMessage(mHandler.obtainMessage(EVENT_REGISTER_NETWORK_FACTORY, nfi));
        return nfi.factorySerialNumber;
        mHandler.sendMessage(mHandler.obtainMessage(EVENT_REGISTER_NETWORK_PROVIDER, npi));
        return npi.providerId;
    }

    @Override
    public void unregisterNetworkProvider(Messenger messenger) {
        enforceNetworkFactoryPermission();
        mHandler.sendMessage(mHandler.obtainMessage(EVENT_UNREGISTER_NETWORK_FACTORY, messenger));
        mHandler.sendMessage(mHandler.obtainMessage(EVENT_UNREGISTER_NETWORK_PROVIDER, messenger));
    }

    @Override
@@ -5404,13 +5405,13 @@ public class ConnectivityService extends IConnectivityManager.Stub
        unregisterNetworkProvider(messenger);
    }

    private void handleUnregisterNetworkFactory(Messenger messenger) {
        NetworkFactoryInfo nfi = mNetworkFactoryInfos.remove(messenger);
        if (nfi == null) {
            loge("Failed to find Messenger in unregisterNetworkFactory");
    private void handleUnregisterNetworkProvider(Messenger messenger) {
        NetworkProviderInfo npi = mNetworkProviderInfos.remove(messenger);
        if (npi == null) {
            loge("Failed to find Messenger in unregisterNetworkProvider");
            return;
        }
        if (DBG) log("unregisterNetworkFactory for " + nfi.name);
        if (DBG) log("unregisterNetworkProvider for " + npi.name);
    }

    @Override
@@ -5484,7 +5485,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
            LinkProperties linkProperties, NetworkCapabilities networkCapabilities,
            int currentScore, NetworkMisc networkMisc) {
        return registerNetworkAgent(messenger, networkInfo, linkProperties, networkCapabilities,
                currentScore, networkMisc, NetworkFactory.SerialNumber.NONE);
                currentScore, networkMisc, NetworkProvider.ID_NONE);
    }

    /**
@@ -5500,11 +5501,11 @@ public class ConnectivityService extends IConnectivityManager.Stub
     * @param currentScore the initial score of the network. See
     *         {@link NetworkAgentInfo#getCurrentScore}.
     * @param networkMisc metadata about the network. This is never updated.
     * @param factorySerialNumber the serial number of the factory owning this NetworkAgent.
     * @param providerId the ID of the provider owning this NetworkAgent.
     */
    public int registerNetworkAgent(Messenger messenger, NetworkInfo networkInfo,
            LinkProperties linkProperties, NetworkCapabilities networkCapabilities,
            int currentScore, NetworkMisc networkMisc, int factorySerialNumber) {
            int currentScore, NetworkMisc networkMisc, int providerId) {
        enforceNetworkFactoryPermission();

        LinkProperties lp = new LinkProperties(linkProperties);
@@ -5517,7 +5518,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
        final NetworkAgentInfo nai = new NetworkAgentInfo(messenger, new AsyncChannel(),
                new Network(mNetIdManager.reserveNetId()), new NetworkInfo(networkInfo), lp, nc,
                ns, mContext, mTrackerHandler, new NetworkMisc(networkMisc), this, mNetd,
                mDnsResolver, mNMS, factorySerialNumber);
                mDnsResolver, mNMS, providerId);
        // Make sure the network capabilities reflect what the agent info says.
        nai.getAndSetNetworkCapabilities(mixInCapabilities(nai, nc));
        final String extraInfo = networkInfo.getExtraInfo();
@@ -5796,7 +5797,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
        // Once a NetworkAgent is connected, complain if some immutable capabilities are removed.
         // Don't complain for VPNs since they're not driven by requests and there is no risk of
         // causing a connect/teardown loop.
         // TODO: remove this altogether and make it the responsibility of the NetworkFactories to
         // TODO: remove this altogether and make it the responsibility of the NetworkProviders to
         // avoid connect/teardown loops.
        if (nai.everConnected &&
                !nai.isVPN() &&
@@ -6036,13 +6037,13 @@ public class ConnectivityService extends IConnectivityManager.Stub
        if (VDBG || DDBG){
            log("sending new Min Network Score(" + score + "): " + networkRequest.toString());
        }
        for (NetworkFactoryInfo nfi : mNetworkFactoryInfos.values()) {
            nfi.requestNetwork(networkRequest, score, serial);
        for (NetworkProviderInfo npi : mNetworkProviderInfos.values()) {
            npi.requestNetwork(networkRequest, score, serial);
        }
    }

    /** Sends all current NetworkRequests to the specified factory. */
    private void sendAllRequestsToFactory(NetworkFactoryInfo nfi) {
    private void sendAllRequestsToProvider(NetworkProviderInfo npi) {
        ensureRunningOnConnectivityServiceThread();
        for (NetworkRequestInfo nri : mNetworkRequests.values()) {
            if (nri.request.isListen()) continue;
@@ -6054,9 +6055,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
                serial = nai.factorySerialNumber;
            } else {
                score = 0;
                serial = NetworkFactory.SerialNumber.NONE;
                serial = NetworkProvider.ID_NONE;
            }
            nfi.requestNetwork(nri.request, score, serial);
            npi.requestNetwork(nri.request, score, serial);
        }
    }

@@ -6337,11 +6338,11 @@ public class ConnectivityService extends IConnectivityManager.Stub
                    Slog.wtf(TAG, "BUG: " + newSatisfier.name() + " already has " + nri.request);
                }
                addedRequests.add(nri);
                // Tell NetworkFactories about the new score, so they can stop
                // Tell NetworkProviders about the new score, so they can stop
                // trying to connect if they know they cannot match it.
                // TODO - this could get expensive if we have a lot of requests for this
                // network.  Think about if there is a way to reduce this.  Push
                // netid->request mapping to each factory?
                // netid->request mapping to each provider?
                sendUpdatedScoreToFactories(nri.request, newSatisfier);
                if (isDefaultRequest(nri)) {
                    isNewDefault = true;
@@ -6370,7 +6371,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
                } else {
                    Slog.wtf(TAG, "BUG: Removing request " + nri.request.requestId + " from " +
                            newNetwork.name() +
                            " without updating mSatisfier or factories!");
                            " without updating mSatisfier or providers!");
                }
                // TODO: Technically, sending CALLBACK_LOST here is
                // incorrect if there is a replacement network currently
+2 −2
Original line number Diff line number Diff line
@@ -54,10 +54,10 @@ import android.net.LocalSocketAddress;
import android.net.Network;
import android.net.NetworkAgent;
import android.net.NetworkCapabilities;
import android.net.NetworkFactory;
import android.net.NetworkInfo;
import android.net.NetworkInfo.DetailedState;
import android.net.NetworkMisc;
import android.net.NetworkProvider;
import android.net.RouteInfo;
import android.net.UidRange;
import android.net.VpnService;
@@ -958,7 +958,7 @@ public class Vpn {
            mNetworkAgent = new NetworkAgent(mLooper, mContext, NETWORKTYPE /* logtag */,
                    mNetworkInfo, mNetworkCapabilities, lp,
                    ConnectivityConstants.VPN_DEFAULT_SCORE, networkMisc,
                    NetworkFactory.SerialNumber.VPN) {
                    NetworkProvider.ID_VPN) {
                            @Override
                            public void unwanted() {
                                // We are user controlled, not driven by NetworkRequest.
Loading