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

Commit 7cbc1241 authored by Frank Li's avatar Frank Li Committed by Automerger Merge Worker
Browse files

Merge "Add session ID to VpnTransportInfo" am: 24aca4c9 am: 864f0858

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

Change-Id: I554a86b2445f0449e5556871f553158dff19e192
parents 183fb163 864f0858
Loading
Loading
Loading
Loading
+3 −1
Original line number Original line Diff line number Diff line
@@ -176,10 +176,12 @@ package android.net {
  }
  }


  public final class VpnTransportInfo implements android.os.Parcelable android.net.TransportInfo {
  public final class VpnTransportInfo implements android.os.Parcelable android.net.TransportInfo {
    ctor public VpnTransportInfo(int);
    ctor public VpnTransportInfo(int, @Nullable String);
    method public int describeContents();
    method public int describeContents();
    method @NonNull public android.net.VpnTransportInfo makeCopy(long);
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.net.VpnTransportInfo> CREATOR;
    field @NonNull public static final android.os.Parcelable.Creator<android.net.VpnTransportInfo> CREATOR;
    field @Nullable public final String sessionId;
    field public final int type;
    field public final int type;
  }
  }


+27 −5
Original line number Original line Diff line number Diff line
@@ -17,11 +17,14 @@
package android.net;
package android.net;


import static android.annotation.SystemApi.Client.MODULE_LIBRARIES;
import static android.annotation.SystemApi.Client.MODULE_LIBRARIES;
import static android.net.NetworkCapabilities.REDACT_FOR_NETWORK_SETTINGS;


import android.annotation.NonNull;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.Parcelable;
import android.text.TextUtils;


import java.util.Objects;
import java.util.Objects;


@@ -38,8 +41,26 @@ public final class VpnTransportInfo implements TransportInfo, Parcelable {
    /** Type of this VPN. */
    /** Type of this VPN. */
    public final int type;
    public final int type;


    public VpnTransportInfo(int type) {
    @Nullable
    public final String sessionId;

    @Override
    public long getApplicableRedactions() {
        return REDACT_FOR_NETWORK_SETTINGS;
    }

    /**
     * Create a copy of a {@link VpnTransportInfo} with the sessionId redacted if necessary.
     */
    @NonNull
    public VpnTransportInfo makeCopy(long redactions) {
        return new VpnTransportInfo(type,
            ((redactions & REDACT_FOR_NETWORK_SETTINGS) != 0) ? null : sessionId);
    }

    public VpnTransportInfo(int type, @Nullable String sessionId) {
        this.type = type;
        this.type = type;
        this.sessionId = sessionId;
    }
    }


    @Override
    @Override
@@ -47,17 +68,17 @@ public final class VpnTransportInfo implements TransportInfo, Parcelable {
        if (!(o instanceof VpnTransportInfo)) return false;
        if (!(o instanceof VpnTransportInfo)) return false;


        VpnTransportInfo that = (VpnTransportInfo) o;
        VpnTransportInfo that = (VpnTransportInfo) o;
        return this.type == that.type;
        return (this.type == that.type) && TextUtils.equals(this.sessionId, that.sessionId);
    }
    }


    @Override
    @Override
    public int hashCode() {
    public int hashCode() {
        return Objects.hash(type);
        return Objects.hash(type, sessionId);
    }
    }


    @Override
    @Override
    public String toString() {
    public String toString() {
        return String.format("VpnTransportInfo{type=%d}", type);
        return String.format("VpnTransportInfo{type=%d, sessionId=%s}", type, sessionId);
    }
    }


    @Override
    @Override
@@ -68,12 +89,13 @@ public final class VpnTransportInfo implements TransportInfo, Parcelable {
    @Override
    @Override
    public void writeToParcel(@NonNull Parcel dest, int flags) {
    public void writeToParcel(@NonNull Parcel dest, int flags) {
        dest.writeInt(type);
        dest.writeInt(type);
        dest.writeString(sessionId);
    }
    }


    public static final @NonNull Creator<VpnTransportInfo> CREATOR =
    public static final @NonNull Creator<VpnTransportInfo> CREATOR =
            new Creator<VpnTransportInfo>() {
            new Creator<VpnTransportInfo>() {
        public VpnTransportInfo createFromParcel(Parcel in) {
        public VpnTransportInfo createFromParcel(Parcel in) {
            return new VpnTransportInfo(in.readInt());
            return new VpnTransportInfo(in.readInt(), in.readString());
        }
        }
        public VpnTransportInfo[] newArray(int size) {
        public VpnTransportInfo[] newArray(int size) {
            return new VpnTransportInfo[size];
            return new VpnTransportInfo[size];
+3 −3
Original line number Original line Diff line number Diff line
@@ -462,7 +462,7 @@ public class Vpn {
                .addTransportType(NetworkCapabilities.TRANSPORT_VPN)
                .addTransportType(NetworkCapabilities.TRANSPORT_VPN)
                .removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN)
                .removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN)
                .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VCN_MANAGED)
                .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VCN_MANAGED)
                .setTransportInfo(new VpnTransportInfo(VpnManager.TYPE_VPN_NONE))
                .setTransportInfo(new VpnTransportInfo(VpnManager.TYPE_VPN_NONE, null))
                .build();
                .build();


        loadAlwaysOnPackage();
        loadAlwaysOnPackage();
@@ -526,7 +526,7 @@ public class Vpn {
    private void resetNetworkCapabilities() {
    private void resetNetworkCapabilities() {
        mNetworkCapabilities = new NetworkCapabilities.Builder(mNetworkCapabilities)
        mNetworkCapabilities = new NetworkCapabilities.Builder(mNetworkCapabilities)
                .setUids(null)
                .setUids(null)
                .setTransportInfo(new VpnTransportInfo(VpnManager.TYPE_VPN_NONE))
                .setTransportInfo(new VpnTransportInfo(VpnManager.TYPE_VPN_NONE, null))
                .build();
                .build();
    }
    }


@@ -1256,7 +1256,7 @@ public class Vpn {
        capsBuilder.setUids(createUserAndRestrictedProfilesRanges(mUserId,
        capsBuilder.setUids(createUserAndRestrictedProfilesRanges(mUserId,
                mConfig.allowedApplications, mConfig.disallowedApplications));
                mConfig.allowedApplications, mConfig.disallowedApplications));


        capsBuilder.setTransportInfo(new VpnTransportInfo(getActiveVpnType()));
        capsBuilder.setTransportInfo(new VpnTransportInfo(getActiveVpnType(), mConfig.session));


        // Only apps targeting Q and above can explicitly declare themselves as metered.
        // Only apps targeting Q and above can explicitly declare themselves as metered.
        // These VPNs are assumed metered unless they state otherwise.
        // These VPNs are assumed metered unless they state otherwise.
+28 −15
Original line number Original line Diff line number Diff line
@@ -16,6 +16,9 @@


package android.net;
package android.net;


import static android.net.NetworkCapabilities.REDACT_FOR_NETWORK_SETTINGS;
import static android.net.NetworkCapabilities.REDACT_NONE;

import static com.android.testutils.ParcelUtils.assertParcelSane;
import static com.android.testutils.ParcelUtils.assertParcelSane;


import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertEquals;
@@ -33,23 +36,33 @@ public class VpnTransportInfoTest {


    @Test
    @Test
    public void testParceling() {
    public void testParceling() {
        VpnTransportInfo v = new VpnTransportInfo(VpnManager.TYPE_VPN_PLATFORM);
        VpnTransportInfo v = new VpnTransportInfo(VpnManager.TYPE_VPN_PLATFORM, "12345");
        assertParcelSane(v, 1 /* fieldCount */);
        assertParcelSane(v, 2 /* fieldCount */);
    }
    }


    @Test
    @Test
    public void testEqualsAndHashCode() {
    public void testEqualsAndHashCode() {
        VpnTransportInfo v1 = new VpnTransportInfo(VpnManager.TYPE_VPN_PLATFORM);
        String session1 = "12345";
        VpnTransportInfo v2 = new VpnTransportInfo(VpnManager.TYPE_VPN_SERVICE);
        String session2 = "6789";
        VpnTransportInfo v3 = new VpnTransportInfo(VpnManager.TYPE_VPN_PLATFORM);
        VpnTransportInfo v11 = new VpnTransportInfo(VpnManager.TYPE_VPN_PLATFORM, session1);
        VpnTransportInfo v4 = new VpnTransportInfo(VpnManager.TYPE_VPN_LEGACY);
        VpnTransportInfo v12 = new VpnTransportInfo(VpnManager.TYPE_VPN_SERVICE, session1);
        VpnTransportInfo v5 = new VpnTransportInfo(VpnManager.TYPE_VPN_OEM);
        VpnTransportInfo v13 = new VpnTransportInfo(VpnManager.TYPE_VPN_PLATFORM, session1);

        VpnTransportInfo v14 = new VpnTransportInfo(VpnManager.TYPE_VPN_LEGACY, session1);
        assertNotEquals(v1, v2);
        VpnTransportInfo v15 = new VpnTransportInfo(VpnManager.TYPE_VPN_OEM, session1);
        assertNotEquals(v3, v4);
        VpnTransportInfo v21 = new VpnTransportInfo(VpnManager.TYPE_VPN_LEGACY, session2);
        assertNotEquals(v4, v5);


        VpnTransportInfo v31 = v11.makeCopy(REDACT_FOR_NETWORK_SETTINGS);
        assertEquals(v1, v3);
        VpnTransportInfo v32 = v13.makeCopy(REDACT_FOR_NETWORK_SETTINGS);
        assertEquals(v1.hashCode(), v3.hashCode());

        assertNotEquals(v11, v12);
        assertNotEquals(v13, v14);
        assertNotEquals(v14, v15);
        assertNotEquals(v14, v21);

        assertEquals(v11, v13);
        assertEquals(v31, v32);
        assertEquals(v11.hashCode(), v13.hashCode());
        assertEquals(REDACT_FOR_NETWORK_SETTINGS, v32.getApplicableRedactions());
        assertEquals(session1, v15.makeCopy(REDACT_NONE).sessionId);
    }
    }
}
}
+3 −1
Original line number Original line Diff line number Diff line
@@ -1233,10 +1233,12 @@ public class ConnectivityServiceTest {
            if (mAgentRegistered) throw new IllegalStateException("already registered");
            if (mAgentRegistered) throw new IllegalStateException("already registered");
            updateState(NetworkInfo.DetailedState.CONNECTING, "registerAgent");
            updateState(NetworkInfo.DetailedState.CONNECTING, "registerAgent");
            mConfig = new VpnConfig();
            mConfig = new VpnConfig();
            mConfig.session = "MySession12345";
            setUids(uids);
            setUids(uids);
            if (!isAlwaysMetered) mNetworkCapabilities.addCapability(NET_CAPABILITY_NOT_METERED);
            if (!isAlwaysMetered) mNetworkCapabilities.addCapability(NET_CAPABILITY_NOT_METERED);
            mInterface = VPN_IFNAME;
            mInterface = VPN_IFNAME;
            mNetworkCapabilities.setTransportInfo(new VpnTransportInfo(getActiveVpnType()));
            mNetworkCapabilities.setTransportInfo(new VpnTransportInfo(getActiveVpnType(),
                    mConfig.session));
            mMockNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_VPN, lp,
            mMockNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_VPN, lp,
                    mNetworkCapabilities);
                    mNetworkCapabilities);
            mMockNetworkAgent.waitForIdle(TIMEOUT_MS);
            mMockNetworkAgent.waitForIdle(TIMEOUT_MS);