Loading core/java/android/net/LinkProperties.java +136 −24 Original line number Diff line number Diff line Loading @@ -50,6 +50,7 @@ public final class LinkProperties implements Parcelable { private String mIfaceName; private ArrayList<LinkAddress> mLinkAddresses = new ArrayList<LinkAddress>(); private ArrayList<InetAddress> mDnses = new ArrayList<InetAddress>(); private ArrayList<InetAddress> mValidatedPrivateDnses = new ArrayList<InetAddress>(); private boolean mUsePrivateDns; private String mPrivateDnsServerName; private String mDomains; Loading Loading @@ -167,6 +168,9 @@ public final class LinkProperties implements Parcelable { mIfaceName = source.getInterfaceName(); for (LinkAddress l : source.getLinkAddresses()) mLinkAddresses.add(l); for (InetAddress i : source.getDnsServers()) mDnses.add(i); for (InetAddress i : source.getValidatedPrivateDnsServers()) { mValidatedPrivateDnses.add(i); } mUsePrivateDns = source.mUsePrivateDns; mPrivateDnsServerName = source.mPrivateDnsServerName; mDomains = source.getDomains(); Loading Loading @@ -374,7 +378,7 @@ public final class LinkProperties implements Parcelable { * Replaces the DNS servers in this {@code LinkProperties} with * the given {@link Collection} of {@link InetAddress} objects. * * @param addresses The {@link Collection} of DNS servers to set in this object. * @param dnsServers The {@link Collection} of DNS servers to set in this object. * @hide */ public void setDnsServers(Collection<InetAddress> dnsServers) { Loading Loading @@ -447,6 +451,65 @@ public final class LinkProperties implements Parcelable { return mPrivateDnsServerName; } /** * Adds the given {@link InetAddress} to the list of validated private DNS servers, * if not present. This is distinct from the server name in that these are actually * resolved addresses. * * @param dnsServer The {@link InetAddress} to add to the list of validated private DNS servers. * @return true if the DNS server was added, false if it was already present. * @hide */ public boolean addValidatedPrivateDnsServer(InetAddress dnsServer) { if (dnsServer != null && !mValidatedPrivateDnses.contains(dnsServer)) { mValidatedPrivateDnses.add(dnsServer); return true; } return false; } /** * Removes the given {@link InetAddress} from the list of validated private DNS servers. * * @param dnsServer The {@link InetAddress} to remove from the list of validated private DNS * servers. * @return true if the DNS server was removed, false if it did not exist. * @hide */ public boolean removeValidatedPrivateDnsServer(InetAddress dnsServer) { if (dnsServer != null) { return mValidatedPrivateDnses.remove(dnsServer); } return false; } /** * Replaces the validated private DNS servers in this {@code LinkProperties} with * the given {@link Collection} of {@link InetAddress} objects. * * @param dnsServers The {@link Collection} of validated private DNS servers to set in this * object. * @hide */ public void setValidatedPrivateDnsServers(Collection<InetAddress> dnsServers) { mValidatedPrivateDnses.clear(); for (InetAddress dnsServer: dnsServers) { addValidatedPrivateDnsServer(dnsServer); } } /** * Returns all the {@link InetAddress} for validated private DNS servers on this link. * These are resolved from the private DNS server name. * * @return An umodifiable {@link List} of {@link InetAddress} for validated private * DNS servers on this link. * @hide */ public List<InetAddress> getValidatedPrivateDnsServers() { return Collections.unmodifiableList(mValidatedPrivateDnses); } /** * Sets the DNS domain search path used on this link. * Loading Loading @@ -715,6 +778,15 @@ public final class LinkProperties implements Parcelable { privateDnsServerName = "PrivateDnsServerName: " + mPrivateDnsServerName + " "; } String validatedPrivateDns = ""; if (!mValidatedPrivateDnses.isEmpty()) { validatedPrivateDns = "ValidatedPrivateDnsAddresses: ["; for (InetAddress addr : mValidatedPrivateDnses) { validatedPrivateDns += addr.getHostAddress() + ","; } validatedPrivateDns += "] "; } String domainName = "Domains: " + mDomains; String mtu = " MTU: " + mMtu; Loading Loading @@ -976,6 +1048,20 @@ public final class LinkProperties implements Parcelable { target.getPrivateDnsServerName())); } /** * Compares this {@code LinkProperties} validated private DNS addresses against * the target * * @param target LinkProperties to compare. * @return {@code true} if both are identical, {@code false} otherwise. * @hide */ public boolean isIdenticalValidatedPrivateDnses(LinkProperties target) { Collection<InetAddress> targetDnses = target.getValidatedPrivateDnsServers(); return (mValidatedPrivateDnses.size() == targetDnses.size()) ? mValidatedPrivateDnses.containsAll(targetDnses) : false; } /** * Compares this {@code LinkProperties} Routes against the target * Loading Loading @@ -1074,6 +1160,7 @@ public final class LinkProperties implements Parcelable { && isIdenticalAddresses(target) && isIdenticalDnses(target) && isIdenticalPrivateDns(target) && isIdenticalValidatedPrivateDnses(target) && isIdenticalRoutes(target) && isIdenticalHttpProxy(target) && isIdenticalStackedLinks(target) Loading Loading @@ -1120,6 +1207,19 @@ public final class LinkProperties implements Parcelable { return new CompareResult<>(mDnses, target != null ? target.getDnsServers() : null); } /** * Compares the validated private DNS addresses in this LinkProperties with another * LinkProperties. * * @param target a LinkProperties with the new list of validated private dns addresses * @return the differences between the DNS addresses. * @hide */ public CompareResult<InetAddress> compareValidatedPrivateDnses(LinkProperties target) { return new CompareResult<>(mValidatedPrivateDnses, target != null ? target.getValidatedPrivateDnsServers() : null); } /** * Compares all routes in this LinkProperties with another LinkProperties, * examining both the the base link and all stacked links. Loading Loading @@ -1168,6 +1268,7 @@ public final class LinkProperties implements Parcelable { return ((null == mIfaceName) ? 0 : mIfaceName.hashCode() + mLinkAddresses.size() * 31 + mDnses.size() * 37 + mValidatedPrivateDnses.size() * 61 + ((null == mDomains) ? 0 : mDomains.hashCode()) + mRoutes.size() * 41 + ((null == mHttpProxy) ? 0 : mHttpProxy.hashCode()) Loading @@ -1192,6 +1293,10 @@ public final class LinkProperties implements Parcelable { for (InetAddress d : mDnses) { dest.writeByteArray(d.getAddress()); } dest.writeInt(mValidatedPrivateDnses.size()); for (InetAddress d : mValidatedPrivateDnses) { dest.writeByteArray(d.getAddress()); } dest.writeBoolean(mUsePrivateDns); dest.writeString(mPrivateDnsServerName); dest.writeString(mDomains); Loading Loading @@ -1234,6 +1339,13 @@ public final class LinkProperties implements Parcelable { netProp.addDnsServer(InetAddress.getByAddress(in.createByteArray())); } catch (UnknownHostException e) { } } addressCount = in.readInt(); for (int i = 0; i < addressCount; i++) { try { netProp.addValidatedPrivateDnsServer( InetAddress.getByAddress(in.createByteArray())); } catch (UnknownHostException e) { } } netProp.setUsePrivateDns(in.readBoolean()); netProp.setPrivateDnsServerName(in.readString()); netProp.setDomains(in.readString()); Loading Loading @@ -1265,9 +1377,9 @@ public final class LinkProperties implements Parcelable { */ public static boolean isValidMtu(int mtu, boolean ipv6) { if (ipv6) { if ((mtu >= MIN_MTU_V6 && mtu <= MAX_MTU)) return true; if (mtu >= MIN_MTU_V6 && mtu <= MAX_MTU) return true; } else { if ((mtu >= MIN_MTU && mtu <= MAX_MTU)) return true; if (mtu >= MIN_MTU && mtu <= MAX_MTU) return true; } return false; } Loading tests/net/java/android/net/LinkPropertiesTest.java +35 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import android.net.LinkProperties; import android.net.LinkProperties.CompareResult; import android.net.LinkProperties.ProvisioningChange; import android.net.RouteInfo; import android.os.Parcel; import android.support.test.filters.SmallTest; import android.support.test.runner.AndroidJUnit4; import android.system.OsConstants; Loading Loading @@ -82,6 +83,9 @@ public class LinkPropertiesTest { assertTrue(source.isIdenticalPrivateDns(target)); assertTrue(target.isIdenticalPrivateDns(source)); assertTrue(source.isIdenticalValidatedPrivateDnses(target)); assertTrue(target.isIdenticalValidatedPrivateDnses(source)); assertTrue(source.isIdenticalRoutes(target)); assertTrue(target.isIdenticalRoutes(source)); Loading Loading @@ -784,4 +788,35 @@ public class LinkPropertiesTest { assertEquals(new ArraySet<>(expectAdded), new ArraySet<>(result.added)); assertEquals(new ArraySet<>(expectRemoved), (new ArraySet<>(result.removed))); } @Test public void testLinkPropertiesParcelable() { LinkProperties source = new LinkProperties(); source.setInterfaceName(NAME); // set 2 link addresses source.addLinkAddress(LINKADDRV4); source.addLinkAddress(LINKADDRV6); // set 2 dnses source.addDnsServer(DNS1); source.addDnsServer(DNS2); // set 2 gateways source.addRoute(new RouteInfo(GATEWAY1)); source.addRoute(new RouteInfo(GATEWAY2)); // set 2 validated private dnses source.addValidatedPrivateDnsServer(DNS6); source.addValidatedPrivateDnsServer(GATEWAY61); source.setMtu(MTU); Parcel p = Parcel.obtain(); source.writeToParcel(p, /* flags */ 0); p.setDataPosition(0); final byte[] marshalled = p.marshall(); p = Parcel.obtain(); p.unmarshall(marshalled, 0, marshalled.length); p.setDataPosition(0); LinkProperties dest = LinkProperties.CREATOR.createFromParcel(p); assertEquals(source, dest); } } Loading
core/java/android/net/LinkProperties.java +136 −24 Original line number Diff line number Diff line Loading @@ -50,6 +50,7 @@ public final class LinkProperties implements Parcelable { private String mIfaceName; private ArrayList<LinkAddress> mLinkAddresses = new ArrayList<LinkAddress>(); private ArrayList<InetAddress> mDnses = new ArrayList<InetAddress>(); private ArrayList<InetAddress> mValidatedPrivateDnses = new ArrayList<InetAddress>(); private boolean mUsePrivateDns; private String mPrivateDnsServerName; private String mDomains; Loading Loading @@ -167,6 +168,9 @@ public final class LinkProperties implements Parcelable { mIfaceName = source.getInterfaceName(); for (LinkAddress l : source.getLinkAddresses()) mLinkAddresses.add(l); for (InetAddress i : source.getDnsServers()) mDnses.add(i); for (InetAddress i : source.getValidatedPrivateDnsServers()) { mValidatedPrivateDnses.add(i); } mUsePrivateDns = source.mUsePrivateDns; mPrivateDnsServerName = source.mPrivateDnsServerName; mDomains = source.getDomains(); Loading Loading @@ -374,7 +378,7 @@ public final class LinkProperties implements Parcelable { * Replaces the DNS servers in this {@code LinkProperties} with * the given {@link Collection} of {@link InetAddress} objects. * * @param addresses The {@link Collection} of DNS servers to set in this object. * @param dnsServers The {@link Collection} of DNS servers to set in this object. * @hide */ public void setDnsServers(Collection<InetAddress> dnsServers) { Loading Loading @@ -447,6 +451,65 @@ public final class LinkProperties implements Parcelable { return mPrivateDnsServerName; } /** * Adds the given {@link InetAddress} to the list of validated private DNS servers, * if not present. This is distinct from the server name in that these are actually * resolved addresses. * * @param dnsServer The {@link InetAddress} to add to the list of validated private DNS servers. * @return true if the DNS server was added, false if it was already present. * @hide */ public boolean addValidatedPrivateDnsServer(InetAddress dnsServer) { if (dnsServer != null && !mValidatedPrivateDnses.contains(dnsServer)) { mValidatedPrivateDnses.add(dnsServer); return true; } return false; } /** * Removes the given {@link InetAddress} from the list of validated private DNS servers. * * @param dnsServer The {@link InetAddress} to remove from the list of validated private DNS * servers. * @return true if the DNS server was removed, false if it did not exist. * @hide */ public boolean removeValidatedPrivateDnsServer(InetAddress dnsServer) { if (dnsServer != null) { return mValidatedPrivateDnses.remove(dnsServer); } return false; } /** * Replaces the validated private DNS servers in this {@code LinkProperties} with * the given {@link Collection} of {@link InetAddress} objects. * * @param dnsServers The {@link Collection} of validated private DNS servers to set in this * object. * @hide */ public void setValidatedPrivateDnsServers(Collection<InetAddress> dnsServers) { mValidatedPrivateDnses.clear(); for (InetAddress dnsServer: dnsServers) { addValidatedPrivateDnsServer(dnsServer); } } /** * Returns all the {@link InetAddress} for validated private DNS servers on this link. * These are resolved from the private DNS server name. * * @return An umodifiable {@link List} of {@link InetAddress} for validated private * DNS servers on this link. * @hide */ public List<InetAddress> getValidatedPrivateDnsServers() { return Collections.unmodifiableList(mValidatedPrivateDnses); } /** * Sets the DNS domain search path used on this link. * Loading Loading @@ -715,6 +778,15 @@ public final class LinkProperties implements Parcelable { privateDnsServerName = "PrivateDnsServerName: " + mPrivateDnsServerName + " "; } String validatedPrivateDns = ""; if (!mValidatedPrivateDnses.isEmpty()) { validatedPrivateDns = "ValidatedPrivateDnsAddresses: ["; for (InetAddress addr : mValidatedPrivateDnses) { validatedPrivateDns += addr.getHostAddress() + ","; } validatedPrivateDns += "] "; } String domainName = "Domains: " + mDomains; String mtu = " MTU: " + mMtu; Loading Loading @@ -976,6 +1048,20 @@ public final class LinkProperties implements Parcelable { target.getPrivateDnsServerName())); } /** * Compares this {@code LinkProperties} validated private DNS addresses against * the target * * @param target LinkProperties to compare. * @return {@code true} if both are identical, {@code false} otherwise. * @hide */ public boolean isIdenticalValidatedPrivateDnses(LinkProperties target) { Collection<InetAddress> targetDnses = target.getValidatedPrivateDnsServers(); return (mValidatedPrivateDnses.size() == targetDnses.size()) ? mValidatedPrivateDnses.containsAll(targetDnses) : false; } /** * Compares this {@code LinkProperties} Routes against the target * Loading Loading @@ -1074,6 +1160,7 @@ public final class LinkProperties implements Parcelable { && isIdenticalAddresses(target) && isIdenticalDnses(target) && isIdenticalPrivateDns(target) && isIdenticalValidatedPrivateDnses(target) && isIdenticalRoutes(target) && isIdenticalHttpProxy(target) && isIdenticalStackedLinks(target) Loading Loading @@ -1120,6 +1207,19 @@ public final class LinkProperties implements Parcelable { return new CompareResult<>(mDnses, target != null ? target.getDnsServers() : null); } /** * Compares the validated private DNS addresses in this LinkProperties with another * LinkProperties. * * @param target a LinkProperties with the new list of validated private dns addresses * @return the differences between the DNS addresses. * @hide */ public CompareResult<InetAddress> compareValidatedPrivateDnses(LinkProperties target) { return new CompareResult<>(mValidatedPrivateDnses, target != null ? target.getValidatedPrivateDnsServers() : null); } /** * Compares all routes in this LinkProperties with another LinkProperties, * examining both the the base link and all stacked links. Loading Loading @@ -1168,6 +1268,7 @@ public final class LinkProperties implements Parcelable { return ((null == mIfaceName) ? 0 : mIfaceName.hashCode() + mLinkAddresses.size() * 31 + mDnses.size() * 37 + mValidatedPrivateDnses.size() * 61 + ((null == mDomains) ? 0 : mDomains.hashCode()) + mRoutes.size() * 41 + ((null == mHttpProxy) ? 0 : mHttpProxy.hashCode()) Loading @@ -1192,6 +1293,10 @@ public final class LinkProperties implements Parcelable { for (InetAddress d : mDnses) { dest.writeByteArray(d.getAddress()); } dest.writeInt(mValidatedPrivateDnses.size()); for (InetAddress d : mValidatedPrivateDnses) { dest.writeByteArray(d.getAddress()); } dest.writeBoolean(mUsePrivateDns); dest.writeString(mPrivateDnsServerName); dest.writeString(mDomains); Loading Loading @@ -1234,6 +1339,13 @@ public final class LinkProperties implements Parcelable { netProp.addDnsServer(InetAddress.getByAddress(in.createByteArray())); } catch (UnknownHostException e) { } } addressCount = in.readInt(); for (int i = 0; i < addressCount; i++) { try { netProp.addValidatedPrivateDnsServer( InetAddress.getByAddress(in.createByteArray())); } catch (UnknownHostException e) { } } netProp.setUsePrivateDns(in.readBoolean()); netProp.setPrivateDnsServerName(in.readString()); netProp.setDomains(in.readString()); Loading Loading @@ -1265,9 +1377,9 @@ public final class LinkProperties implements Parcelable { */ public static boolean isValidMtu(int mtu, boolean ipv6) { if (ipv6) { if ((mtu >= MIN_MTU_V6 && mtu <= MAX_MTU)) return true; if (mtu >= MIN_MTU_V6 && mtu <= MAX_MTU) return true; } else { if ((mtu >= MIN_MTU && mtu <= MAX_MTU)) return true; if (mtu >= MIN_MTU && mtu <= MAX_MTU) return true; } return false; } Loading
tests/net/java/android/net/LinkPropertiesTest.java +35 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import android.net.LinkProperties; import android.net.LinkProperties.CompareResult; import android.net.LinkProperties.ProvisioningChange; import android.net.RouteInfo; import android.os.Parcel; import android.support.test.filters.SmallTest; import android.support.test.runner.AndroidJUnit4; import android.system.OsConstants; Loading Loading @@ -82,6 +83,9 @@ public class LinkPropertiesTest { assertTrue(source.isIdenticalPrivateDns(target)); assertTrue(target.isIdenticalPrivateDns(source)); assertTrue(source.isIdenticalValidatedPrivateDnses(target)); assertTrue(target.isIdenticalValidatedPrivateDnses(source)); assertTrue(source.isIdenticalRoutes(target)); assertTrue(target.isIdenticalRoutes(source)); Loading Loading @@ -784,4 +788,35 @@ public class LinkPropertiesTest { assertEquals(new ArraySet<>(expectAdded), new ArraySet<>(result.added)); assertEquals(new ArraySet<>(expectRemoved), (new ArraySet<>(result.removed))); } @Test public void testLinkPropertiesParcelable() { LinkProperties source = new LinkProperties(); source.setInterfaceName(NAME); // set 2 link addresses source.addLinkAddress(LINKADDRV4); source.addLinkAddress(LINKADDRV6); // set 2 dnses source.addDnsServer(DNS1); source.addDnsServer(DNS2); // set 2 gateways source.addRoute(new RouteInfo(GATEWAY1)); source.addRoute(new RouteInfo(GATEWAY2)); // set 2 validated private dnses source.addValidatedPrivateDnsServer(DNS6); source.addValidatedPrivateDnsServer(GATEWAY61); source.setMtu(MTU); Parcel p = Parcel.obtain(); source.writeToParcel(p, /* flags */ 0); p.setDataPosition(0); final byte[] marshalled = p.marshall(); p = Parcel.obtain(); p.unmarshall(marshalled, 0, marshalled.length); p.setDataPosition(0); LinkProperties dest = LinkProperties.CREATOR.createFromParcel(p); assertEquals(source, dest); } }