summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Lorenzo Colitti <lorenzo@google.com> 2013-08-08 19:24:09 +0900
committer Lorenzo Colitti <lorenzo@google.com> 2013-08-20 14:19:20 +0900
commit6eb8a62a26f35ed1c2938945bb86a65f486a8052 (patch)
tree4d31a4d1ba4837ff5aa8dfc39ccb2249f6d13e3f
parent9f78d309dc99668d5b06ca18af8b854be44cedfc (diff)
Add a string constructor to LinkAddress.
This will allow us to do new LinkAddress("2001:db8::1/64"). Bug: 10232006 Change-Id: If479bdbab16826afe9d82732215141841c282299
-rw-r--r--core/java/android/net/LinkAddress.java41
1 files changed, 35 insertions, 6 deletions
diff --git a/core/java/android/net/LinkAddress.java b/core/java/android/net/LinkAddress.java
index f6a114c83402..a390add89ebd 100644
--- a/core/java/android/net/LinkAddress.java
+++ b/core/java/android/net/LinkAddress.java
@@ -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