Have a method to stop VPN and send event to VPN app
Have a method to stop VPN and send CATEGORY_EVENT_DEACTIVATED_BY_USER event to VPN app. Both of prepareInternal() and stopVpnProfile() have the same behavior, so have a method for them to reduce the duplicate. Bug: 236409954 Test: atest FrameworksNetTests:VpnTest Change-Id: I54b550e6f972a13f61cbcf15ee1fb9fe3c313d7b
This commit is contained in:
@@ -1196,25 +1196,7 @@ public class Vpn {
|
|||||||
mContext.unbindService(mConnection);
|
mContext.unbindService(mConnection);
|
||||||
cleanupVpnStateLocked();
|
cleanupVpnStateLocked();
|
||||||
} else if (mVpnRunner != null) {
|
} else if (mVpnRunner != null) {
|
||||||
// Build intent first because the sessionKey will be reset after performing
|
stopVpnRunnerAndNotifyAppLocked(mPackage);
|
||||||
// VpnRunner.exit(). Also, cache mOwnerUID even if ownerUID will not be changed in
|
|
||||||
// VpnRunner.exit() to prevent design being changed in the future.
|
|
||||||
// TODO(b/230548427): Remove SDK check once VPN related stuff are decoupled from
|
|
||||||
// ConnectivityServiceTest.
|
|
||||||
final int ownerUid = mOwnerUID;
|
|
||||||
Intent intent = null;
|
|
||||||
if (SdkLevel.isAtLeastT() && isVpnApp(mPackage)) {
|
|
||||||
intent = buildVpnManagerEventIntent(
|
|
||||||
VpnManager.CATEGORY_EVENT_DEACTIVATED_BY_USER,
|
|
||||||
-1 /* errorClass */, -1 /* errorCode*/, mPackage,
|
|
||||||
getSessionKeyLocked(), makeVpnProfileStateLocked(),
|
|
||||||
null /* underlyingNetwork */, null /* nc */, null /* lp */);
|
|
||||||
}
|
|
||||||
// cleanupVpnStateLocked() is called from mVpnRunner.exit()
|
|
||||||
mVpnRunner.exit();
|
|
||||||
if (intent != null && isVpnApp(mPackage)) {
|
|
||||||
notifyVpnManagerVpnStopped(mPackage, ownerUid, intent);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -4074,6 +4056,29 @@ public class Vpn {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GuardedBy("this")
|
||||||
|
private void stopVpnRunnerAndNotifyAppLocked(@NonNull String packageName) {
|
||||||
|
// Build intent first because the sessionKey will be reset after performing
|
||||||
|
// VpnRunner.exit(). Also, cache mOwnerUID even if ownerUID will not be changed in
|
||||||
|
// VpnRunner.exit() to prevent design being changed in the future.
|
||||||
|
// TODO(b/230548427): Remove SDK check once VPN related stuff are decoupled from
|
||||||
|
// ConnectivityServiceTest.
|
||||||
|
final int ownerUid = mOwnerUID;
|
||||||
|
Intent intent = null;
|
||||||
|
if (SdkLevel.isAtLeastT() && isVpnApp(packageName)) {
|
||||||
|
intent = buildVpnManagerEventIntent(
|
||||||
|
VpnManager.CATEGORY_EVENT_DEACTIVATED_BY_USER,
|
||||||
|
-1 /* errorClass */, -1 /* errorCode*/, packageName,
|
||||||
|
getSessionKeyLocked(), makeVpnProfileStateLocked(),
|
||||||
|
null /* underlyingNetwork */, null /* nc */, null /* lp */);
|
||||||
|
}
|
||||||
|
// cleanupVpnStateLocked() is called from mVpnRunner.exit()
|
||||||
|
mVpnRunner.exit();
|
||||||
|
if (intent != null && isVpnApp(packageName)) {
|
||||||
|
notifyVpnManagerVpnStopped(packageName, ownerUid, intent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Stops an already running VPN Profile for the given package.
|
* Stops an already running VPN Profile for the given package.
|
||||||
*
|
*
|
||||||
@@ -4090,18 +4095,7 @@ public class Vpn {
|
|||||||
// To stop the VPN profile, the caller must be the current prepared package and must be
|
// To stop the VPN profile, the caller must be the current prepared package and must be
|
||||||
// running an Ikev2VpnProfile.
|
// running an Ikev2VpnProfile.
|
||||||
if (isCurrentIkev2VpnLocked(packageName)) {
|
if (isCurrentIkev2VpnLocked(packageName)) {
|
||||||
// Build intent first because the sessionKey will be reset after performing
|
stopVpnRunnerAndNotifyAppLocked(packageName);
|
||||||
// VpnRunner.exit(). Also, cache mOwnerUID even if ownerUID will not be changed in
|
|
||||||
// VpnRunner.exit() to prevent design being changed in the future.
|
|
||||||
final int ownerUid = mOwnerUID;
|
|
||||||
final Intent intent = buildVpnManagerEventIntent(
|
|
||||||
VpnManager.CATEGORY_EVENT_DEACTIVATED_BY_USER,
|
|
||||||
-1 /* errorClass */, -1 /* errorCode*/, packageName,
|
|
||||||
getSessionKeyLocked(), makeVpnProfileStateLocked(),
|
|
||||||
null /* underlyingNetwork */, null /* nc */, null /* lp */);
|
|
||||||
|
|
||||||
mVpnRunner.exit();
|
|
||||||
notifyVpnManagerVpnStopped(packageName, ownerUid, intent);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user