Merge changes I7fd4b6da,Ia36d7944,If7eb7e0e
* changes: Modify javadoc for some extra values of VpnManager event Add toString() for VpnProfileState Move mSessionKey into Ikev2VpnRunner and make it to be a final var
This commit is contained in:
@@ -187,14 +187,24 @@ public class VpnManager {
|
|||||||
/**
|
/**
|
||||||
* The network that was underlying the VPN when the event occurred, as a {@link Network}.
|
* The network that was underlying the VPN when the event occurred, as a {@link Network}.
|
||||||
*
|
*
|
||||||
* This extra will be null if there was no underlying network at the time of the event.
|
* <p>This extra will be null if there was no underlying network at the time of the event, or
|
||||||
|
* the underlying network has no bearing on the event, as in the case of:
|
||||||
|
* <ul>
|
||||||
|
* <li>CATEGORY_EVENT_DEACTIVATED_BY_USER
|
||||||
|
* <li>CATEGORY_EVENT_ALWAYS_ON_STATE_CHANGED
|
||||||
|
* </ul>
|
||||||
*/
|
*/
|
||||||
public static final String EXTRA_UNDERLYING_NETWORK = "android.net.extra.UNDERLYING_NETWORK";
|
public static final String EXTRA_UNDERLYING_NETWORK = "android.net.extra.UNDERLYING_NETWORK";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The {@link NetworkCapabilities} of the underlying network when the event occurred.
|
* The {@link NetworkCapabilities} of the underlying network when the event occurred.
|
||||||
*
|
*
|
||||||
* This extra will be null if there was no underlying network at the time of the event.
|
* <p>This extra will be null if there was no underlying network at the time of the event, or
|
||||||
|
* the underlying network has no bearing on the event, as in the case of:
|
||||||
|
* <ul>
|
||||||
|
* <li>CATEGORY_EVENT_DEACTIVATED_BY_USER
|
||||||
|
* <li>CATEGORY_EVENT_ALWAYS_ON_STATE_CHANGED
|
||||||
|
* </ul>
|
||||||
*/
|
*/
|
||||||
public static final String EXTRA_UNDERLYING_NETWORK_CAPABILITIES =
|
public static final String EXTRA_UNDERLYING_NETWORK_CAPABILITIES =
|
||||||
"android.net.extra.UNDERLYING_NETWORK_CAPABILITIES";
|
"android.net.extra.UNDERLYING_NETWORK_CAPABILITIES";
|
||||||
@@ -202,7 +212,12 @@ public class VpnManager {
|
|||||||
/**
|
/**
|
||||||
* The {@link LinkProperties} of the underlying network when the event occurred.
|
* The {@link LinkProperties} of the underlying network when the event occurred.
|
||||||
*
|
*
|
||||||
* This extra will be null if there was no underlying network at the time of the event.
|
* <p>This extra will be null if there was no underlying network at the time of the event, or
|
||||||
|
* the underlying network has no bearing on the event, as in the case of:
|
||||||
|
* <ul>
|
||||||
|
* <li>CATEGORY_EVENT_DEACTIVATED_BY_USER
|
||||||
|
* <li>CATEGORY_EVENT_ALWAYS_ON_STATE_CHANGED
|
||||||
|
* </ul>
|
||||||
*/
|
*/
|
||||||
public static final String EXTRA_UNDERLYING_LINK_PROPERTIES =
|
public static final String EXTRA_UNDERLYING_LINK_PROPERTIES =
|
||||||
"android.net.extra.UNDERLYING_LINK_PROPERTIES";
|
"android.net.extra.UNDERLYING_LINK_PROPERTIES";
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import android.os.Parcelable;
|
|||||||
|
|
||||||
import java.lang.annotation.Retention;
|
import java.lang.annotation.Retention;
|
||||||
import java.lang.annotation.RetentionPolicy;
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.util.StringJoiner;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Describe the state of VPN.
|
* Describe the state of VPN.
|
||||||
@@ -150,4 +151,29 @@ public final class VpnProfileState implements Parcelable {
|
|||||||
mAlwaysOn = in.readBoolean();
|
mAlwaysOn = in.readBoolean();
|
||||||
mLockdown = in.readBoolean();
|
mLockdown = in.readBoolean();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String convertStateToString(@State int state) {
|
||||||
|
switch (state) {
|
||||||
|
case STATE_CONNECTED:
|
||||||
|
return "CONNECTED";
|
||||||
|
case STATE_CONNECTING:
|
||||||
|
return "CONNECTING";
|
||||||
|
case STATE_DISCONNECTED:
|
||||||
|
return "DISCONNECTED";
|
||||||
|
case STATE_FAILED:
|
||||||
|
return "FAILED";
|
||||||
|
default:
|
||||||
|
return "UNKNOWN";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
final StringJoiner resultJoiner = new StringJoiner(", ", "{", "}");
|
||||||
|
resultJoiner.add("State: " + convertStateToString(getState()));
|
||||||
|
resultJoiner.add("SessionId: " + getSessionId());
|
||||||
|
resultJoiner.add("Always-on: " + isAlwaysOn());
|
||||||
|
resultJoiner.add("Lockdown: " + isLockdownEnabled());
|
||||||
|
return resultJoiner.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -209,7 +209,6 @@ public class Vpn {
|
|||||||
private final NetworkInfo mNetworkInfo;
|
private final NetworkInfo mNetworkInfo;
|
||||||
private int mLegacyState;
|
private int mLegacyState;
|
||||||
@VisibleForTesting protected String mPackage;
|
@VisibleForTesting protected String mPackage;
|
||||||
private String mSessionKey;
|
|
||||||
private int mOwnerUID;
|
private int mOwnerUID;
|
||||||
private boolean mIsPackageTargetingAtLeastQ;
|
private boolean mIsPackageTargetingAtLeastQ;
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
@@ -1991,9 +1990,7 @@ public class Vpn {
|
|||||||
public synchronized int getActiveVpnType() {
|
public synchronized int getActiveVpnType() {
|
||||||
if (!mNetworkInfo.isConnectedOrConnecting()) return VpnManager.TYPE_VPN_NONE;
|
if (!mNetworkInfo.isConnectedOrConnecting()) return VpnManager.TYPE_VPN_NONE;
|
||||||
if (mVpnRunner == null) return VpnManager.TYPE_VPN_SERVICE;
|
if (mVpnRunner == null) return VpnManager.TYPE_VPN_SERVICE;
|
||||||
return mVpnRunner instanceof IkeV2VpnRunner
|
return isIkev2VpnRunner() ? VpnManager.TYPE_VPN_PLATFORM : VpnManager.TYPE_VPN_LEGACY;
|
||||||
? VpnManager.TYPE_VPN_PLATFORM
|
|
||||||
: VpnManager.TYPE_VPN_LEGACY;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateAlwaysOnNotification(DetailedState networkState) {
|
private void updateAlwaysOnNotification(DetailedState networkState) {
|
||||||
@@ -2524,6 +2521,7 @@ public class Vpn {
|
|||||||
@Nullable private IpSecTunnelInterface mTunnelIface;
|
@Nullable private IpSecTunnelInterface mTunnelIface;
|
||||||
@Nullable private IkeSession mSession;
|
@Nullable private IkeSession mSession;
|
||||||
@Nullable private Network mActiveNetwork;
|
@Nullable private Network mActiveNetwork;
|
||||||
|
private final String mSessionKey;
|
||||||
|
|
||||||
IkeV2VpnRunner(@NonNull Ikev2VpnProfile profile) {
|
IkeV2VpnRunner(@NonNull Ikev2VpnProfile profile) {
|
||||||
super(TAG);
|
super(TAG);
|
||||||
@@ -2869,7 +2867,6 @@ public class Vpn {
|
|||||||
*/
|
*/
|
||||||
private void disconnectVpnRunner() {
|
private void disconnectVpnRunner() {
|
||||||
mActiveNetwork = null;
|
mActiveNetwork = null;
|
||||||
mSessionKey = null;
|
|
||||||
mIsRunning = false;
|
mIsRunning = false;
|
||||||
|
|
||||||
resetIkeState();
|
resetIkeState();
|
||||||
@@ -3299,7 +3296,7 @@ public class Vpn {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean isCurrentIkev2VpnLocked(@NonNull String packageName) {
|
private boolean isCurrentIkev2VpnLocked(@NonNull String packageName) {
|
||||||
return isCurrentPreparedPackage(packageName) && mVpnRunner instanceof IkeV2VpnRunner;
|
return isCurrentPreparedPackage(packageName) && isIkev2VpnRunner();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -3353,6 +3350,16 @@ public class Vpn {
|
|||||||
return VpnProfile.decode("" /* Key unused */, encoded);
|
return VpnProfile.decode("" /* Key unused */, encoded);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isIkev2VpnRunner() {
|
||||||
|
return (mVpnRunner instanceof IkeV2VpnRunner);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GuardedBy("this")
|
||||||
|
@Nullable
|
||||||
|
private String getSessionKeyLocked() {
|
||||||
|
return isIkev2VpnRunner() ? ((IkeV2VpnRunner) mVpnRunner).mSessionKey : null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Starts an already provisioned VPN Profile, keyed by package name.
|
* Starts an already provisioned VPN Profile, keyed by package name.
|
||||||
*
|
*
|
||||||
@@ -3380,7 +3387,11 @@ public class Vpn {
|
|||||||
}
|
}
|
||||||
|
|
||||||
startVpnProfilePrivileged(profile, packageName);
|
startVpnProfilePrivileged(profile, packageName);
|
||||||
return mSessionKey;
|
if (!isIkev2VpnRunner()) {
|
||||||
|
throw new IllegalStateException("mVpnRunner shouldn't be null and should also be "
|
||||||
|
+ "an instance of Ikev2VpnRunner");
|
||||||
|
}
|
||||||
|
return getSessionKeyLocked();
|
||||||
} finally {
|
} finally {
|
||||||
Binder.restoreCallingIdentity(token);
|
Binder.restoreCallingIdentity(token);
|
||||||
}
|
}
|
||||||
@@ -3483,11 +3494,8 @@ public class Vpn {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private VpnProfileState makeVpnProfileState() {
|
private VpnProfileState makeVpnProfileState() {
|
||||||
// TODO: mSessionKey will be moved to Ikev2VpnRunner once aosp/2007077 is merged, so after
|
return new VpnProfileState(getStateFromLegacyState(mLegacyState),
|
||||||
// merging aosp/2007077, here should check Ikev2VpnRunner is null or not. Session key will
|
isIkev2VpnRunner() ? getSessionKeyLocked() : null, mAlwaysOn, mLockdown);
|
||||||
// be null if Ikev2VpnRunner is null.
|
|
||||||
return new VpnProfileState(getStateFromLegacyState(mLegacyState), mSessionKey, mAlwaysOn,
|
|
||||||
mLockdown);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user