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

Commit 5e3e2383 authored by Lorenzo Colitti's avatar Lorenzo Colitti Committed by Automerger Merge Worker
Browse files

Merge changes from topic "networkagent-set-underlying-networks" am: dccf7eda...

Merge changes from topic "networkagent-set-underlying-networks" am: dccf7eda am: 5b849b3c am: 06af1de3

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1501816

Change-Id: I6a96b80ab6d94e0cfe4b202ec5aa4a3096c2f090
parents d7d4846f 06af1de3
Loading
Loading
Loading
Loading
+30 −24
Original line number Diff line number Diff line
@@ -4730,10 +4730,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
            if (mLockdownEnabled) {
                return new VpnInfo[0];
            }

            List<VpnInfo> infoList = new ArrayList<>();
            for (int i = 0; i < mVpns.size(); i++) {
                VpnInfo info = createVpnInfo(mVpns.valueAt(i));
            for (NetworkAgentInfo nai : mNetworkAgentInfos.values()) {
                VpnInfo info = createVpnInfo(nai);
                if (info != null) {
                    infoList.add(info);
                }
@@ -4746,13 +4745,10 @@ public class ConnectivityService extends IConnectivityManager.Stub
     * @return VPN information for accounting, or null if we can't retrieve all required
     *         information, e.g underlying ifaces.
     */
    @Nullable
    private VpnInfo createVpnInfo(Vpn vpn) {
        VpnInfo info = vpn.getVpnInfo();
        if (info == null) {
            return null;
        }
        Network[] underlyingNetworks = vpn.getUnderlyingNetworks();
    private VpnInfo createVpnInfo(NetworkAgentInfo nai) {
        if (!nai.isVPN()) return null;

        Network[] underlyingNetworks = nai.declaredUnderlyingNetworks;
        // see VpnService.setUnderlyingNetworks()'s javadoc about how to interpret
        // the underlyingNetworks list.
        if (underlyingNetworks == null) {
@@ -4761,23 +4757,33 @@ public class ConnectivityService extends IConnectivityManager.Stub
                underlyingNetworks = new Network[] { defaultNai.network };
            }
        }
        if (underlyingNetworks != null && underlyingNetworks.length > 0) {

        if (ArrayUtils.isEmpty(underlyingNetworks)) return null;

        List<String> interfaces = new ArrayList<>();
        for (Network network : underlyingNetworks) {
                LinkProperties lp = getLinkProperties(network);
                if (lp != null) {
            NetworkAgentInfo underlyingNai = getNetworkAgentInfoForNetwork(network);
            if (underlyingNai == null) continue;
            LinkProperties lp = underlyingNai.linkProperties;
            for (String iface : lp.getAllInterfaceNames()) {
                if (!TextUtils.isEmpty(iface)) {
                    interfaces.add(iface);
                }
            }
        }
            }
            if (!interfaces.isEmpty()) {
                info.underlyingIfaces = interfaces.toArray(new String[interfaces.size()]);
            }
        }
        return info.underlyingIfaces == null ? null : info;

        if (interfaces.isEmpty()) return null;

        VpnInfo info = new VpnInfo();
        info.ownerUid = nai.networkCapabilities.getOwnerUid();
        info.vpnIface = nai.linkProperties.getInterfaceName();
        // Must be non-null or NetworkStatsService will crash.
        // Cannot happen in production code because Vpn only registers the NetworkAgent after the
        // tun or ipsec interface is created.
        if (info.vpnIface == null) return null;
        info.underlyingIfaces = interfaces.toArray(new String[0]);

        return info;
    }

    /**