Add a string constructor to LinkAddress.

This will allow us to do new LinkAddress("2001:db8::1/64").

Bug: 10232006
Change-Id: If479bdbab16826afe9d82732215141841c282299
This commit is contained in:
Lorenzo Colitti
2013-08-08 19:24:09 +09:00
parent db5cb48920
commit b48bb0801a

View File

@@ -32,27 +32,56 @@ public class LinkAddress implements Parcelable {
/** /**
* IPv4 or IPv6 address. * IPv4 or IPv6 address.
*/ */
private final InetAddress address; private InetAddress address;
/** /**
* Network prefix length * 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 || if (address == null || prefixLength < 0 ||
((address instanceof Inet4Address) && prefixLength > 32) || ((address instanceof Inet4Address) && prefixLength > 32) ||
(prefixLength > 128)) { (prefixLength > 128)) {
throw new IllegalArgumentException("Bad LinkAddress params " + address + throw new IllegalArgumentException("Bad LinkAddress params " + address +
prefixLength); "/" + prefixLength);
} }
this.address = address; this.address = address;
this.prefixLength = prefixLength; this.prefixLength = prefixLength;
} }
public LinkAddress(InetAddress address, int prefixLength) {
init(address, prefixLength);
}
public LinkAddress(InterfaceAddress interfaceAddress) { public LinkAddress(InterfaceAddress interfaceAddress) {
this.address = interfaceAddress.getAddress(); init(interfaceAddress.getAddress(),
this.prefixLength = interfaceAddress.getNetworkPrefixLength(); 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 @Override