Loading services/core/java/com/android/server/connectivity/Vpn.java +95 −17 Original line number Diff line number Diff line Loading @@ -519,12 +519,8 @@ public class Vpn { @NonNull NetworkScore score, @NonNull NetworkAgentConfig config, @Nullable NetworkProvider provider) { return new NetworkAgent(context, looper, logTag, nc, lp, score, config, provider) { @Override public void onNetworkUnwanted() { // We are user controlled, not driven by NetworkRequest. } }; return new VpnNetworkAgentWrapper( context, looper, logTag, nc, lp, score, config, provider); } } Loading Loading @@ -1818,7 +1814,7 @@ public class Vpn { Log.wtf(TAG, "Failed to add restricted user to owner", e); } if (mNetworkAgent != null) { mNetworkAgent.sendNetworkCapabilities(mNetworkCapabilities); doSendNetworkCapabilities(mNetworkAgent, mNetworkCapabilities); } } setVpnForcedLocked(mLockdown); Loading Loading @@ -1848,7 +1844,7 @@ public class Vpn { Log.wtf(TAG, "Failed to remove restricted user to owner", e); } if (mNetworkAgent != null) { mNetworkAgent.sendNetworkCapabilities(mNetworkCapabilities); doSendNetworkCapabilities(mNetworkAgent, mNetworkCapabilities); } } setVpnForcedLocked(mLockdown); Loading Loading @@ -2082,7 +2078,7 @@ public class Vpn { return false; } boolean success = jniAddAddress(mInterface, address, prefixLength); mNetworkAgent.sendLinkProperties(makeLinkProperties()); doSendLinkProperties(mNetworkAgent, makeLinkProperties()); return success; } Loading @@ -2091,7 +2087,7 @@ public class Vpn { return false; } boolean success = jniDelAddress(mInterface, address, prefixLength); mNetworkAgent.sendLinkProperties(makeLinkProperties()); doSendLinkProperties(mNetworkAgent, makeLinkProperties()); return success; } Loading @@ -2105,8 +2101,11 @@ public class Vpn { // Make defensive copy since the content of array might be altered by the caller. mConfig.underlyingNetworks = (networks != null) ? Arrays.copyOf(networks, networks.length) : null; mNetworkAgent.setUnderlyingNetworks((mConfig.underlyingNetworks != null) ? Arrays.asList(mConfig.underlyingNetworks) : null); doSetUnderlyingNetworks( mNetworkAgent, (mConfig.underlyingNetworks != null) ? Arrays.asList(mConfig.underlyingNetworks) : null); return true; } Loading Loading @@ -2916,7 +2915,7 @@ public class Vpn { return; // Link properties are already sent. } else { // Underlying networks also set in agentConnect() networkAgent.setUnderlyingNetworks(Collections.singletonList(network)); doSetUnderlyingNetworks(networkAgent, Collections.singletonList(network)); mNetworkCapabilities = new NetworkCapabilities.Builder(mNetworkCapabilities) .setUnderlyingNetworks(Collections.singletonList(network)) Loading @@ -2926,7 +2925,7 @@ public class Vpn { lp = makeLinkProperties(); // Accesses VPN instance fields; must be locked } networkAgent.sendLinkProperties(lp); doSendLinkProperties(networkAgent, lp); } catch (Exception e) { Log.d(TAG, "Error in ChildOpened for token " + token, e); onSessionLost(token, e); Loading Loading @@ -2993,7 +2992,7 @@ public class Vpn { new NetworkCapabilities.Builder(mNetworkCapabilities) .setUnderlyingNetworks(Collections.singletonList(network)) .build(); mNetworkAgent.setUnderlyingNetworks(Collections.singletonList(network)); doSetUnderlyingNetworks(mNetworkAgent, Collections.singletonList(network)); } mTunnelIface.setUnderlyingNetwork(network); Loading Loading @@ -3389,7 +3388,7 @@ public class Vpn { null /*gateway*/, null /*iface*/, RTN_UNREACHABLE)); } if (mNetworkAgent != null) { mNetworkAgent.sendLinkProperties(makeLinkProperties()); doSendLinkProperties(mNetworkAgent, makeLinkProperties()); } } } Loading Loading @@ -4126,7 +4125,7 @@ public class Vpn { .setUids(createUserAndRestrictedProfilesRanges( mUserId, null /* allowedApplications */, excludedApps)) .build(); mNetworkAgent.sendNetworkCapabilities(mNetworkCapabilities); doSendNetworkCapabilities(mNetworkAgent, mNetworkCapabilities); } } } Loading Loading @@ -4203,6 +4202,85 @@ public class Vpn { return isCurrentIkev2VpnLocked(packageName) ? makeVpnProfileStateLocked() : null; } /** Proxy to allow different testing setups */ // TODO: b/240492694 Remove VpnNetworkAgentWrapper and this method when // NetworkAgent#sendLinkProperties can be un-finalized. private static void doSendLinkProperties( @NonNull NetworkAgent agent, @NonNull LinkProperties lp) { if (agent instanceof VpnNetworkAgentWrapper) { ((VpnNetworkAgentWrapper) agent).doSendLinkProperties(lp); } else { agent.sendLinkProperties(lp); } } /** Proxy to allow different testing setups */ // TODO: b/240492694 Remove VpnNetworkAgentWrapper and this method when // NetworkAgent#sendNetworkCapabilities can be un-finalized. private static void doSendNetworkCapabilities( @NonNull NetworkAgent agent, @NonNull NetworkCapabilities nc) { if (agent instanceof VpnNetworkAgentWrapper) { ((VpnNetworkAgentWrapper) agent).doSendNetworkCapabilities(nc); } else { agent.sendNetworkCapabilities(nc); } } /** Proxy to allow different testing setups */ // TODO: b/240492694 Remove VpnNetworkAgentWrapper and this method when // NetworkAgent#setUnderlyingNetworks can be un-finalized. private static void doSetUnderlyingNetworks( @NonNull NetworkAgent agent, @NonNull List<Network> networks) { if (agent instanceof VpnNetworkAgentWrapper) { ((VpnNetworkAgentWrapper) agent).doSetUnderlyingNetworks(networks); } else { agent.setUnderlyingNetworks(networks); } } /** * Proxy to allow testing * * @hide */ // TODO: b/240492694 Remove VpnNetworkAgentWrapper when NetworkAgent's methods can be // un-finalized. @VisibleForTesting public static class VpnNetworkAgentWrapper extends NetworkAgent { /** Create an VpnNetworkAgentWrapper */ public VpnNetworkAgentWrapper( @NonNull Context context, @NonNull Looper looper, @NonNull String logTag, @NonNull NetworkCapabilities nc, @NonNull LinkProperties lp, @NonNull NetworkScore score, @NonNull NetworkAgentConfig config, @Nullable NetworkProvider provider) { super(context, looper, logTag, nc, lp, score, config, provider); } /** Update the LinkProperties */ public void doSendLinkProperties(@NonNull LinkProperties lp) { sendLinkProperties(lp); } /** Update the NetworkCapabilities */ public void doSendNetworkCapabilities(@NonNull NetworkCapabilities nc) { sendNetworkCapabilities(nc); } /** Set the underlying networks */ public void doSetUnderlyingNetworks(@NonNull List<Network> networks) { setUnderlyingNetworks(networks); } @Override public void onNetworkUnwanted() { // We are user controlled, not driven by NetworkRequest. } } /** * Proxy to allow testing * Loading Loading
services/core/java/com/android/server/connectivity/Vpn.java +95 −17 Original line number Diff line number Diff line Loading @@ -519,12 +519,8 @@ public class Vpn { @NonNull NetworkScore score, @NonNull NetworkAgentConfig config, @Nullable NetworkProvider provider) { return new NetworkAgent(context, looper, logTag, nc, lp, score, config, provider) { @Override public void onNetworkUnwanted() { // We are user controlled, not driven by NetworkRequest. } }; return new VpnNetworkAgentWrapper( context, looper, logTag, nc, lp, score, config, provider); } } Loading Loading @@ -1818,7 +1814,7 @@ public class Vpn { Log.wtf(TAG, "Failed to add restricted user to owner", e); } if (mNetworkAgent != null) { mNetworkAgent.sendNetworkCapabilities(mNetworkCapabilities); doSendNetworkCapabilities(mNetworkAgent, mNetworkCapabilities); } } setVpnForcedLocked(mLockdown); Loading Loading @@ -1848,7 +1844,7 @@ public class Vpn { Log.wtf(TAG, "Failed to remove restricted user to owner", e); } if (mNetworkAgent != null) { mNetworkAgent.sendNetworkCapabilities(mNetworkCapabilities); doSendNetworkCapabilities(mNetworkAgent, mNetworkCapabilities); } } setVpnForcedLocked(mLockdown); Loading Loading @@ -2082,7 +2078,7 @@ public class Vpn { return false; } boolean success = jniAddAddress(mInterface, address, prefixLength); mNetworkAgent.sendLinkProperties(makeLinkProperties()); doSendLinkProperties(mNetworkAgent, makeLinkProperties()); return success; } Loading @@ -2091,7 +2087,7 @@ public class Vpn { return false; } boolean success = jniDelAddress(mInterface, address, prefixLength); mNetworkAgent.sendLinkProperties(makeLinkProperties()); doSendLinkProperties(mNetworkAgent, makeLinkProperties()); return success; } Loading @@ -2105,8 +2101,11 @@ public class Vpn { // Make defensive copy since the content of array might be altered by the caller. mConfig.underlyingNetworks = (networks != null) ? Arrays.copyOf(networks, networks.length) : null; mNetworkAgent.setUnderlyingNetworks((mConfig.underlyingNetworks != null) ? Arrays.asList(mConfig.underlyingNetworks) : null); doSetUnderlyingNetworks( mNetworkAgent, (mConfig.underlyingNetworks != null) ? Arrays.asList(mConfig.underlyingNetworks) : null); return true; } Loading Loading @@ -2916,7 +2915,7 @@ public class Vpn { return; // Link properties are already sent. } else { // Underlying networks also set in agentConnect() networkAgent.setUnderlyingNetworks(Collections.singletonList(network)); doSetUnderlyingNetworks(networkAgent, Collections.singletonList(network)); mNetworkCapabilities = new NetworkCapabilities.Builder(mNetworkCapabilities) .setUnderlyingNetworks(Collections.singletonList(network)) Loading @@ -2926,7 +2925,7 @@ public class Vpn { lp = makeLinkProperties(); // Accesses VPN instance fields; must be locked } networkAgent.sendLinkProperties(lp); doSendLinkProperties(networkAgent, lp); } catch (Exception e) { Log.d(TAG, "Error in ChildOpened for token " + token, e); onSessionLost(token, e); Loading Loading @@ -2993,7 +2992,7 @@ public class Vpn { new NetworkCapabilities.Builder(mNetworkCapabilities) .setUnderlyingNetworks(Collections.singletonList(network)) .build(); mNetworkAgent.setUnderlyingNetworks(Collections.singletonList(network)); doSetUnderlyingNetworks(mNetworkAgent, Collections.singletonList(network)); } mTunnelIface.setUnderlyingNetwork(network); Loading Loading @@ -3389,7 +3388,7 @@ public class Vpn { null /*gateway*/, null /*iface*/, RTN_UNREACHABLE)); } if (mNetworkAgent != null) { mNetworkAgent.sendLinkProperties(makeLinkProperties()); doSendLinkProperties(mNetworkAgent, makeLinkProperties()); } } } Loading Loading @@ -4126,7 +4125,7 @@ public class Vpn { .setUids(createUserAndRestrictedProfilesRanges( mUserId, null /* allowedApplications */, excludedApps)) .build(); mNetworkAgent.sendNetworkCapabilities(mNetworkCapabilities); doSendNetworkCapabilities(mNetworkAgent, mNetworkCapabilities); } } } Loading Loading @@ -4203,6 +4202,85 @@ public class Vpn { return isCurrentIkev2VpnLocked(packageName) ? makeVpnProfileStateLocked() : null; } /** Proxy to allow different testing setups */ // TODO: b/240492694 Remove VpnNetworkAgentWrapper and this method when // NetworkAgent#sendLinkProperties can be un-finalized. private static void doSendLinkProperties( @NonNull NetworkAgent agent, @NonNull LinkProperties lp) { if (agent instanceof VpnNetworkAgentWrapper) { ((VpnNetworkAgentWrapper) agent).doSendLinkProperties(lp); } else { agent.sendLinkProperties(lp); } } /** Proxy to allow different testing setups */ // TODO: b/240492694 Remove VpnNetworkAgentWrapper and this method when // NetworkAgent#sendNetworkCapabilities can be un-finalized. private static void doSendNetworkCapabilities( @NonNull NetworkAgent agent, @NonNull NetworkCapabilities nc) { if (agent instanceof VpnNetworkAgentWrapper) { ((VpnNetworkAgentWrapper) agent).doSendNetworkCapabilities(nc); } else { agent.sendNetworkCapabilities(nc); } } /** Proxy to allow different testing setups */ // TODO: b/240492694 Remove VpnNetworkAgentWrapper and this method when // NetworkAgent#setUnderlyingNetworks can be un-finalized. private static void doSetUnderlyingNetworks( @NonNull NetworkAgent agent, @NonNull List<Network> networks) { if (agent instanceof VpnNetworkAgentWrapper) { ((VpnNetworkAgentWrapper) agent).doSetUnderlyingNetworks(networks); } else { agent.setUnderlyingNetworks(networks); } } /** * Proxy to allow testing * * @hide */ // TODO: b/240492694 Remove VpnNetworkAgentWrapper when NetworkAgent's methods can be // un-finalized. @VisibleForTesting public static class VpnNetworkAgentWrapper extends NetworkAgent { /** Create an VpnNetworkAgentWrapper */ public VpnNetworkAgentWrapper( @NonNull Context context, @NonNull Looper looper, @NonNull String logTag, @NonNull NetworkCapabilities nc, @NonNull LinkProperties lp, @NonNull NetworkScore score, @NonNull NetworkAgentConfig config, @Nullable NetworkProvider provider) { super(context, looper, logTag, nc, lp, score, config, provider); } /** Update the LinkProperties */ public void doSendLinkProperties(@NonNull LinkProperties lp) { sendLinkProperties(lp); } /** Update the NetworkCapabilities */ public void doSendNetworkCapabilities(@NonNull NetworkCapabilities nc) { sendNetworkCapabilities(nc); } /** Set the underlying networks */ public void doSetUnderlyingNetworks(@NonNull List<Network> networks) { setUnderlyingNetworks(networks); } @Override public void onNetworkUnwanted() { // We are user controlled, not driven by NetworkRequest. } } /** * Proxy to allow testing * Loading