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

Commit c5479a08 authored by Remi NGUYEN VAN's avatar Remi NGUYEN VAN Committed by junyulai
Browse files

Add Ethernet, TestNetworkSpecifier API

Rename StringNetworkSpecifier to EthernetNetworkSpecifier (its only
production user), and make it module-lib API.
The original StringNetworkSpecifier file is actually kept to satisfy
some invalid dependencies; it will be removed separately.

This allows specifying an Ethernet interface with a non-deprecated API:
until this change the only way to do so would be to use
NetworkRequest#setSpecifier(String), which is deprecated.

Similarly, add the TestNetworkSpecifier API for TestNetworkManager, to
replace previous usage of StringNetworkSpecifier. TestNetworkManager is
module API, so TestNetworkSpecifier should be module API too. This
allows tests to request the test interface specifically, without using
the deprecated NetworkRequest#setSpecifier(String).

Bug: 179329291
Test: m
Merged-In: Iee569f5c8bbdc4bc979610e1191308281f3d4620

Change-Id: Iee569f5c8bbdc4bc979610e1191308281f3d4620
parent a517079d
Loading
Loading
Loading
Loading
+8 −0
Original line number Original line Diff line number Diff line
@@ -22,6 +22,14 @@ package android.app.usage {


package android.net {
package android.net {


  public final class EthernetNetworkSpecifier extends android.net.NetworkSpecifier implements android.os.Parcelable {
    ctor public EthernetNetworkSpecifier(@NonNull String);
    method public int describeContents();
    method @Nullable public String getInterfaceName();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.net.EthernetNetworkSpecifier> CREATOR;
  }

  public static final class IpSecManager.UdpEncapsulationSocket implements java.lang.AutoCloseable {
  public static final class IpSecManager.UdpEncapsulationSocket implements java.lang.AutoCloseable {
    method public int getResourceId();
    method public int getResourceId();
  }
  }
+97 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2021 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.net;

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

import com.android.internal.util.Preconditions;

import java.util.Objects;

/**
 * A {@link NetworkSpecifier} used to identify ethernet interfaces.
 *
 * @see EthernetManager
 * @hide
 */
@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
public final class EthernetNetworkSpecifier extends NetworkSpecifier implements Parcelable {

    /**
     * Name of the network interface.
     */
    @NonNull
    private final String mInterfaceName;

    public EthernetNetworkSpecifier(@NonNull String interfaceName) {
        Preconditions.checkStringNotEmpty(interfaceName);
        mInterfaceName = interfaceName;
    }

    // This may be null in the future to support specifiers based on data other than the interface
    // name.
    @Nullable
    public String getInterfaceName() {
        return mInterfaceName;
    }

    @Override
    public boolean canBeSatisfiedBy(@Nullable NetworkSpecifier other) {
        return equals(other);
    }

    @Override
    public boolean equals(@Nullable Object o) {
        if (!(o instanceof EthernetNetworkSpecifier)) return false;
        return TextUtils.equals(mInterfaceName, ((EthernetNetworkSpecifier) o).mInterfaceName);
    }

    @Override
    public int hashCode() {
        return Objects.hashCode(mInterfaceName);
    }

    @Override
    public String toString() {
        return "EthernetNetworkSpecifier (" + mInterfaceName + ")";
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(@NonNull Parcel dest, int flags) {
        dest.writeString(mInterfaceName);
    }

    public static final @NonNull Parcelable.Creator<EthernetNetworkSpecifier> CREATOR =
            new Parcelable.Creator<EthernetNetworkSpecifier>() {
        public EthernetNetworkSpecifier createFromParcel(Parcel in) {
            return new EthernetNetworkSpecifier(in.readString());
        }
        public EthernetNetworkSpecifier[] newArray(int size) {
            return new EthernetNetworkSpecifier[size];
        }
    };
}
+8 −0
Original line number Original line Diff line number Diff line
@@ -51,6 +51,14 @@ package android.net {
    field public static final String TEST_TAP_PREFIX = "testtap";
    field public static final String TEST_TAP_PREFIX = "testtap";
  }
  }


  public final class TestNetworkSpecifier extends android.net.NetworkSpecifier implements android.os.Parcelable {
    ctor public TestNetworkSpecifier(@NonNull String);
    method public int describeContents();
    method @Nullable public String getInterfaceName();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.net.TestNetworkSpecifier> CREATOR;
  }

  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);
    method public int describeContents();
    method public int describeContents();
+12 −5
Original line number Original line Diff line number Diff line
@@ -31,6 +31,7 @@ import static android.net.NetworkCapabilities.NET_CAPABILITY_PARTIAL_CONNECTIVIT
import static android.net.NetworkCapabilities.NET_CAPABILITY_TEMPORARILY_NOT_METERED;
import static android.net.NetworkCapabilities.NET_CAPABILITY_TEMPORARILY_NOT_METERED;
import static android.net.NetworkCapabilities.NET_CAPABILITY_TRUSTED;
import static android.net.NetworkCapabilities.NET_CAPABILITY_TRUSTED;
import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED;
import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED;
import static android.net.NetworkCapabilities.TRANSPORT_TEST;


import android.annotation.NonNull;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.Nullable;
@@ -382,11 +383,17 @@ public class NetworkRequest implements Parcelable {
                return setNetworkSpecifier(new TelephonyNetworkSpecifier.Builder()
                return setNetworkSpecifier(new TelephonyNetworkSpecifier.Builder()
                        .setSubscriptionId(subId).build());
                        .setSubscriptionId(subId).build());
            } catch (NumberFormatException nfe) {
            } catch (NumberFormatException nfe) {
                // A StringNetworkSpecifier does not accept null or empty ("") strings. When network
                // An EthernetNetworkSpecifier or TestNetworkSpecifier does not accept null or empty
                // specifiers were strings a null string and an empty string were considered
                // ("") strings. When network specifiers were strings a null string and an empty
                // equivalent. Hence no meaning is attached to a null or empty ("") string.
                // string were considered equivalent. Hence no meaning is attached to a null or
                return setNetworkSpecifier(TextUtils.isEmpty(networkSpecifier) ? null
                // empty ("") string.
                        : new StringNetworkSpecifier(networkSpecifier));
                if (TextUtils.isEmpty(networkSpecifier)) {
                    return setNetworkSpecifier((NetworkSpecifier) null);
                } else if (mNetworkCapabilities.hasTransport(TRANSPORT_TEST)) {
                    return setNetworkSpecifier(new TestNetworkSpecifier(networkSpecifier));
                } else {
                    return setNetworkSpecifier(new EthernetNetworkSpecifier(networkSpecifier));
                }
            }
            }
        }
        }


+97 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2021 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.net;

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

import com.android.internal.util.Preconditions;

import java.util.Objects;

/**
 * A {@link NetworkSpecifier} used to identify test interfaces.
 *
 * @see TestNetworkManager
 * @hide
 */
@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
public final class TestNetworkSpecifier extends NetworkSpecifier implements Parcelable {

    /**
     * Name of the network interface.
     */
    @NonNull
    private final String mInterfaceName;

    public TestNetworkSpecifier(@NonNull String interfaceName) {
        Preconditions.checkStringNotEmpty(interfaceName);
        mInterfaceName = interfaceName;
    }

    // This may be null in the future to support specifiers based on data other than the interface
    // name.
    @Nullable
    public String getInterfaceName() {
        return mInterfaceName;
    }

    @Override
    public boolean canBeSatisfiedBy(@Nullable NetworkSpecifier other) {
        return equals(other);
    }

    @Override
    public boolean equals(Object o) {
        if (!(o instanceof TestNetworkSpecifier)) return false;
        return TextUtils.equals(mInterfaceName, ((TestNetworkSpecifier) o).mInterfaceName);
    }

    @Override
    public int hashCode() {
        return Objects.hashCode(mInterfaceName);
    }

    @Override
    public String toString() {
        return "TestNetworkSpecifier (" + mInterfaceName + ")";
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(@NonNull Parcel dest, int flags) {
        dest.writeString(mInterfaceName);
    }

    public static final @NonNull Creator<TestNetworkSpecifier> CREATOR =
            new Creator<TestNetworkSpecifier>() {
        public TestNetworkSpecifier createFromParcel(Parcel in) {
            return new TestNetworkSpecifier(in.readString());
        }
        public TestNetworkSpecifier[] newArray(int size) {
            return new TestNetworkSpecifier[size];
        }
    };
}
Loading