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

Commit 4d3d5f1f authored by Lorenzo Colitti's avatar Lorenzo Colitti Committed by Android (Google) Code Review
Browse files

Merge "Modify LinkProperties address update methods." into klp-dev

parents 6a99a814 4faa027d
Loading
Loading
Loading
Loading
+47 −6
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import android.text.TextUtils;

import java.net.InetAddress;
import java.net.Inet4Address;
import java.net.Inet6Address;

import java.net.UnknownHostException;
import java.util.ArrayList;
@@ -153,8 +154,28 @@ public class LinkProperties implements Parcelable {
        return addresses;
    }

    public void addLinkAddress(LinkAddress address) {
        if (address != null) mLinkAddresses.add(address);
    /**
     * Adds a link address if it does not exist, or update it if it does.
     * @param address The {@code LinkAddress} to add.
     * @return true if the address was added, false if it already existed.
     */
    public boolean addLinkAddress(LinkAddress address) {
        // TODO: when the LinkAddress has other attributes beyond the
        // address and the prefix length, update them here.
        if (address != null && !mLinkAddresses.contains(address)) {
            mLinkAddresses.add(address);
            return true;
        }
        return false;
    }

    /**
     * Removes a link address.
     * @param address The {@code LinkAddress} to remove.
     * @return true if the address was removed, false if it did not exist.
     */
    public boolean removeLinkAddress(LinkAddress toRemove) {
        return mLinkAddresses.remove(toRemove);
    }

    /**
@@ -245,11 +266,14 @@ public class LinkProperties implements Parcelable {
     * of stacked links. If link is null, nothing changes.
     *
     * @param link The link to add.
     * @return true if the link was stacked, false otherwise.
     */
    public void addStackedLink(LinkProperties link) {
    public boolean addStackedLink(LinkProperties link) {
        if (link != null && link.getInterfaceName() != null) {
            mStackedLinks.put(link.getInterfaceName(), link);
            return true;
        }
        return false;
    }

    /**
@@ -258,12 +282,15 @@ public class LinkProperties implements Parcelable {
     * If there a stacked link with the same interfacename as link, it is
     * removed. Otherwise, nothing changes.
     *
     * @param link The link to add.
     * @param link The link to remove.
     * @return true if the link was removed, false otherwise.
     */
    public void removeStackedLink(LinkProperties link) {
    public boolean removeStackedLink(LinkProperties link) {
        if (link != null && link.getInterfaceName() != null) {
            mStackedLinks.remove(link.getInterfaceName());
            LinkProperties removed = mStackedLinks.remove(link.getInterfaceName());
            return removed != null;
        }
        return false;
    }

    /**
@@ -339,6 +366,20 @@ public class LinkProperties implements Parcelable {
        return false;
    }

    /**
     * Returns true if this link has an IPv6 address.
     *
     * @return {@code true} if there is an IPv6 address, {@code false} otherwise.
     */
    public boolean hasIPv6Address() {
        for (LinkAddress address : mLinkAddresses) {
          if (address.getAddress() instanceof Inet6Address) {
            return true;
          }
        }
        return false;
    }

    /**
     * Compares this {@code LinkProperties} interface name against the target
     *
+56 −0
Original line number Diff line number Diff line
@@ -306,5 +306,61 @@ public class LinkPropertiesTest extends TestCase {
        for (LinkProperties link : rmnet0.getStackedLinks()) {
            assertFalse("newname".equals(link.getInterfaceName()));
        }

        assertTrue(rmnet0.removeStackedLink(clat4));
        assertEquals(0, rmnet0.getStackedLinks().size());
        assertEquals(1, rmnet0.getAddresses().size());
        assertEquals(1, rmnet0.getLinkAddresses().size());
        assertEquals(1, rmnet0.getAllAddresses().size());
        assertEquals(1, rmnet0.getAllLinkAddresses().size());

        assertFalse(rmnet0.removeStackedLink(clat4));
    }

    @SmallTest
    public void testAddressMethods() {
        LinkProperties lp = new LinkProperties();

        // No addresses.
        assertFalse(lp.hasIPv4Address());
        assertFalse(lp.hasIPv6Address());

        // Addresses on stacked links don't count.
        LinkProperties stacked = new LinkProperties();
        stacked.setInterfaceName("stacked");
        lp.addStackedLink(stacked);
        stacked.addLinkAddress(LINKADDRV4);
        stacked.addLinkAddress(LINKADDRV6);
        assertTrue(stacked.hasIPv4Address());
        assertTrue(stacked.hasIPv6Address());
        assertFalse(lp.hasIPv4Address());
        assertFalse(lp.hasIPv6Address());
        lp.removeStackedLink(stacked);
        assertFalse(lp.hasIPv4Address());
        assertFalse(lp.hasIPv6Address());

        // Addresses on the base link.
        // Check the return values of hasIPvXAddress and ensure the add/remove methods return true
        // iff something changes.
        assertTrue(lp.addLinkAddress(LINKADDRV6));
        assertFalse(lp.hasIPv4Address());
        assertTrue(lp.hasIPv6Address());

        assertTrue(lp.removeLinkAddress(LINKADDRV6));
        assertTrue(lp.addLinkAddress(LINKADDRV4));
        assertTrue(lp.hasIPv4Address());
        assertFalse(lp.hasIPv6Address());

        assertTrue(lp.addLinkAddress(LINKADDRV6));
        assertTrue(lp.hasIPv4Address());
        assertTrue(lp.hasIPv6Address());

        // Adding an address twice has no effect.
        // Removing an address that's not present has no effect.
        assertFalse(lp.addLinkAddress(LINKADDRV4));
        assertTrue(lp.hasIPv4Address());
        assertTrue(lp.removeLinkAddress(LINKADDRV4));
        assertFalse(lp.hasIPv4Address());
        assertFalse(lp.removeLinkAddress(LINKADDRV4));
    }
}
+2 −16
Original line number Diff line number Diff line
@@ -3982,8 +3982,8 @@ public class ConnectivityService extends IConnectivityManager.Stub {
                        // Get the type of addresses supported by this link
                        LinkProperties lp = mCs.getLinkProperties(
                                ConnectivityManager.TYPE_MOBILE_HIPRI);
                        boolean linkHasIpv4 = hasIPv4Address(lp);
                        boolean linkHasIpv6 = hasIPv6Address(lp);
                        boolean linkHasIpv4 = lp.hasIPv4Address();
                        boolean linkHasIpv6 = lp.hasIPv6Address();
                        log("isMobileOk: linkHasIpv4=" + linkHasIpv4
                                + " linkHasIpv6=" + linkHasIpv6);

@@ -4129,20 +4129,6 @@ public class ConnectivityService extends IConnectivityManager.Stub {
            }
        }

        public boolean hasIPv4Address(LinkProperties lp) {
            return lp.hasIPv4Address();
        }

        // Not implemented in LinkProperties, do it here.
        public boolean hasIPv6Address(LinkProperties lp) {
            for (LinkAddress address : lp.getLinkAddresses()) {
              if (address.getAddress() instanceof Inet6Address) {
                return true;
              }
            }
            return false;
        }

        private void log(String s) {
            Slog.d(ConnectivityService.TAG, "[" + CHECKMP_TAG + "] " + s);
        }