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

Commit f12a2130 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add the list of private DNS addresses to LinkProperties" into pi-dev

parents db704ca8 9419b114
Loading
Loading
Loading
Loading
+136 −24
Original line number Diff line number Diff line
@@ -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;
@@ -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();
@@ -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) {
@@ -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.
     *
@@ -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;
@@ -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
     *
@@ -1074,6 +1160,7 @@ public final class LinkProperties implements Parcelable {
                && isIdenticalAddresses(target)
                && isIdenticalDnses(target)
                && isIdenticalPrivateDns(target)
                && isIdenticalValidatedPrivateDnses(target)
                && isIdenticalRoutes(target)
                && isIdenticalHttpProxy(target)
                && isIdenticalStackedLinks(target)
@@ -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.
@@ -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())
@@ -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);
@@ -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());
@@ -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;
    }
+35 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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));

@@ -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);
    }
}