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

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

Merge "Add a string constructor to LinkAddress." into klp-dev

parents b06b8b02 6eb8a62a
Loading
Loading
Loading
Loading
+35 −6
Original line number Diff line number Diff line
@@ -32,27 +32,56 @@ public class LinkAddress implements Parcelable {
    /**
     * IPv4 or IPv6 address.
     */
    private final InetAddress address;
    private InetAddress address;

    /**
     * Network prefix length
     */
    private final int prefixLength;
    private int prefixLength;

    public LinkAddress(InetAddress address, int prefixLength) {
    private void init(InetAddress address, int prefixLength) {
        if (address == null || prefixLength < 0 ||
                ((address instanceof Inet4Address) && prefixLength > 32) ||
                (prefixLength > 128)) {
            throw new IllegalArgumentException("Bad LinkAddress params " + address +
                    prefixLength);
                    "/" + prefixLength);
        }
        this.address = address;
        this.prefixLength = prefixLength;
    }

    public LinkAddress(InetAddress address, int prefixLength) {
        init(address, prefixLength);
    }

    public LinkAddress(InterfaceAddress interfaceAddress) {
        this.address = interfaceAddress.getAddress();
        this.prefixLength = interfaceAddress.getNetworkPrefixLength();
        init(interfaceAddress.getAddress(),
             interfaceAddress.getNetworkPrefixLength());
    }

    /**
     * Constructs a new {@code LinkAddress} from a string such as "192.0.2.5/24" or
     * "2001:db8::1/64".
     * @param string The string to parse.
     */
    public LinkAddress(String address) {
        InetAddress inetAddress = null;
        int prefixLength = -1;
        try {
            String [] pieces = address.split("/", 2);
            prefixLength = Integer.parseInt(pieces[1]);
            inetAddress = InetAddress.parseNumericAddress(pieces[0]);
        } catch (NullPointerException e) {            // Null string.
        } catch (ArrayIndexOutOfBoundsException e) {  // No prefix length.
        } catch (NumberFormatException e) {           // Non-numeric prefix.
        } catch (IllegalArgumentException e) {        // Invalid IP address.
        }

        if (inetAddress == null || prefixLength == -1) {
            throw new IllegalArgumentException("Bad LinkAddress params " + address);
        }

        init(inetAddress, prefixLength);
    }

    @Override