diff options
Diffstat (limited to 'framework/src/android/net/StaticIpConfiguration.java')
| -rw-r--r-- | framework/src/android/net/StaticIpConfiguration.java | 55 |
1 files changed, 33 insertions, 22 deletions
diff --git a/framework/src/android/net/StaticIpConfiguration.java b/framework/src/android/net/StaticIpConfiguration.java index 7904f7a4ec..194cffd164 100644 --- a/framework/src/android/net/StaticIpConfiguration.java +++ b/framework/src/android/net/StaticIpConfiguration.java @@ -26,6 +26,7 @@ import android.os.Parcelable; import com.android.net.module.util.InetAddressUtils; +import java.net.Inet4Address; import java.net.InetAddress; import java.util.ArrayList; import java.util.List; @@ -33,24 +34,7 @@ import java.util.Objects; /** * Class that describes static IP configuration. - * - * <p>This class is different from {@link LinkProperties} because it represents - * configuration intent. The general contract is that if we can represent - * a configuration here, then we should be able to configure it on a network. - * The intent is that it closely match the UI we have for configuring networks. - * - * <p>In contrast, {@link LinkProperties} represents current state. It is much more - * expressive. For example, it supports multiple IP addresses, multiple routes, - * stacked interfaces, and so on. Because LinkProperties is so expressive, - * using it to represent configuration intent as well as current state causes - * problems. For example, we could unknowingly save a configuration that we are - * not in fact capable of applying, or we could save a configuration that the - * UI cannot display, which has the potential for malicious code to hide - * hostile or unexpected configuration from the user. - * - * @hide */ -@SystemApi public final class StaticIpConfiguration implements Parcelable { /** @hide */ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) @@ -69,10 +53,14 @@ public final class StaticIpConfiguration implements Parcelable { @Nullable public String domains; + /** @hide */ + @SystemApi public StaticIpConfiguration() { dnsServers = new ArrayList<>(); } + /** @hide */ + @SystemApi public StaticIpConfiguration(@Nullable StaticIpConfiguration source) { this(); if (source != null) { @@ -84,6 +72,8 @@ public final class StaticIpConfiguration implements Parcelable { } } + /** @hide */ + @SystemApi public void clear() { ipAddress = null; gateway = null; @@ -94,7 +84,7 @@ public final class StaticIpConfiguration implements Parcelable { /** * Get the static IP address included in the configuration. */ - public @Nullable LinkAddress getIpAddress() { + public @NonNull LinkAddress getIpAddress() { return ipAddress; } @@ -130,10 +120,15 @@ public final class StaticIpConfiguration implements Parcelable { private String mDomains; /** - * Set the IP address to be included in the configuration; null by default. + * Set the IP address to be included in the configuration. + * * @return The {@link Builder} for chaining. */ - public @NonNull Builder setIpAddress(@Nullable LinkAddress ipAddress) { + public @NonNull Builder setIpAddress(@NonNull LinkAddress ipAddress) { + if (ipAddress != null && !(ipAddress.getAddress() instanceof Inet4Address)) { + throw new IllegalArgumentException( + "Only IPv4 addresses can be used for the IP configuration"); + } mIpAddress = ipAddress; return this; } @@ -143,6 +138,10 @@ public final class StaticIpConfiguration implements Parcelable { * @return The {@link Builder} for chaining. */ public @NonNull Builder setGateway(@Nullable InetAddress gateway) { + if (gateway != null && !(gateway instanceof Inet4Address)) { + throw new IllegalArgumentException( + "Only IPv4 addresses can be used for the gateway configuration"); + } mGateway = gateway; return this; } @@ -153,6 +152,12 @@ public final class StaticIpConfiguration implements Parcelable { */ public @NonNull Builder setDnsServers(@NonNull Iterable<InetAddress> dnsServers) { Objects.requireNonNull(dnsServers); + for (InetAddress inetAddress: dnsServers) { + if (!(inetAddress instanceof Inet4Address)) { + throw new IllegalArgumentException( + "Only IPv4 addresses can be used for the DNS server configuration"); + } + } mDnsServers = dnsServers; return this; } @@ -171,6 +176,8 @@ public final class StaticIpConfiguration implements Parcelable { /** * Create a {@link StaticIpConfiguration} from the parameters in this {@link Builder}. * @return The newly created StaticIpConfiguration. + * @throws IllegalArgumentException if an invalid configuration is attempted, e.g. + * if an IP Address was not configured via {@link #setIpAddress(LinkAddress)}. */ public @NonNull StaticIpConfiguration build() { final StaticIpConfiguration config = new StaticIpConfiguration(); @@ -188,7 +195,9 @@ public final class StaticIpConfiguration implements Parcelable { /** * Add a DNS server to this configuration. + * @hide */ + @SystemApi public void addDnsServer(@NonNull InetAddress server) { dnsServers.add(server); } @@ -197,7 +206,9 @@ public final class StaticIpConfiguration implements Parcelable { * Returns the network routes specified by this object. Will typically include a * directly-connected route for the IP address's local subnet and a default route. * @param iface Interface to include in the routes. + * @hide */ + @SystemApi public @NonNull List<RouteInfo> getRoutes(@Nullable String iface) { List<RouteInfo> routes = new ArrayList<RouteInfo>(3); if (ipAddress != null) { @@ -305,7 +316,7 @@ public final class StaticIpConfiguration implements Parcelable { /** Implement the Parcelable interface */ @Override - public void writeToParcel(Parcel dest, int flags) { + public void writeToParcel(@NonNull Parcel dest, int flags) { dest.writeParcelable(ipAddress, flags); InetAddressUtils.parcelInetAddress(dest, gateway, flags); dest.writeInt(dnsServers.size()); @@ -316,7 +327,7 @@ public final class StaticIpConfiguration implements Parcelable { } /** @hide */ - public static StaticIpConfiguration readFromParcel(Parcel in) { + public static @NonNull StaticIpConfiguration readFromParcel(Parcel in) { final StaticIpConfiguration s = new StaticIpConfiguration(); s.ipAddress = in.readParcelable(null); s.gateway = InetAddressUtils.unparcelInetAddress(in); |
