+ /**
+ * Create an IpAddress by interpreting input bytes as an IPv4 or IPv6 address, based on array length.
+ *
+ * @param bytes 4-byte (IPv4) or 6-byte (IPv6) array
+ * @return A no-zone IpAddress object
+ * @throws IllegalArgumentException if bytes has length different from 4 or 6
+ * @throws NullPointerException if bytes is null
+ */
+ public final @NonNull ANZ ipAddressNoZoneFor(final byte @NonNull[] bytes) {
+ switch (bytes.length) {
+ case INET4_LENGTH:
+ return ipv4AddressNoZone(ipv4AddressNoZoneFor(bytes));
+ case INET6_LENGTH:
+ return ipv6AddressNoZone(ipv6AddressNoZoneFor(bytes));
+ default:
+ throw new IllegalArgumentException("Invalid array length " + bytes.length);
+ }
+ }
+
+ public final @NonNull ANZ ipAddressNoZoneFor(final @NonNull InetAddress addr) {
+ requireNonNull(addr, "Address must not be null");
+ if (addr instanceof Inet4Address) {
+ return ipv4AddressNoZone(ipv4AddressNoZoneFor(addr));
+ } else if (addr instanceof Inet6Address) {
+ return ipv6AddressNoZone(ipv6AddressNoZoneFor(addr));
+ } else {
+ throw new IllegalArgumentException("Unhandled address " + addr);
+ }
+ }
+
+ /**
+ * Create an IpPrefix by combining the address with a mask. The address
+ * bytes are interpreted as an address and the specified mask is concatenated to
+ * it. The address bytes are not masked.
+ *
+ * @param bytes Input address as a 4-byte (IPv4) or 16-byte (IPv6) array
+ * @param mask Prefix mask
+ * @return An IpPrefix object
+ * @throws IllegalArgumentException if bytes has length different from 4 or 16 or if mask is not
+ * in range 0-32 or 0-128 respectively
+ * @throws NullPointerException if bytes is null
+ */
+ public final @NonNull P ipPrefixFor(final byte @NonNull[] bytes, final int mask) {
+ switch (bytes.length) {
+ case INET4_LENGTH:
+ return ipv4Prefix(ipv4PrefixFor(bytes, mask));
+ case INET6_LENGTH:
+ return ipv6Prefix(ipv6PrefixFor(bytes, mask));
+ default:
+ throw new IllegalArgumentException("Invalid array length " + bytes.length);
+ }
+ }
+
+ public final @NonNull P ipPrefixFor(final @NonNull InetAddress addr, final int mask) {
+ requireNonNull(addr, "Address must not be null");
+ if (addr instanceof Inet4Address) {
+ return ipv4Prefix(ipv4PrefixFor(addr, mask));
+ } else if (addr instanceof Inet6Address) {
+ return ipv6Prefix(ipv6PrefixFor(addr, mask));
+ } else {
+ throw new IllegalArgumentException("Unhandled address " + addr);
+ }
+ }
+
+ public final @NonNull InetAddress inetAddressFor(final @NonNull A addr) {
+ final A4 v4 = maybeIpv4Address(addr);
+ if (v4 != null) {
+ return inet4AddressFor(v4);
+ }
+ final A6 v6 = maybeIpv6Address(addr);
+ checkArgument(v6 != null, "Address %s is neither IPv4 nor IPv6", addr);
+ return inet6AddressFor(v6);
+ }
+
+ public final @NonNull InetAddress inetAddressForNoZone(final @NonNull ANZ addr) {
+ final A4NZ v4 = maybeIpv4AddressNoZone(addr);
+ if (v4 != null) {
+ return inet4AddressForNoZone(v4);
+ }
+ final A6NZ v6 = maybeIpv6AddressNoZone(addr);
+ checkArgument(v6 != null, "Address %s is neither IPv4 nor IPv6", addr);
+ return inet6AddressForNoZone(v6);
+ }
+
+
+ public final @NonNull Inet4Address inet4AddressFor(final @NonNull A4 addr) {
+ try {
+ return (Inet4Address) InetAddress.getByAddress(ipv4AddressBytes(addr));
+ } catch (UnknownHostException e) {
+ throw new IllegalArgumentException("Invalid address " + addr, e);
+ }
+ }
+
+ public final @NonNull Inet4Address inet4AddressForNoZone(final @NonNull A4NZ addr) {
+ try {
+ return (Inet4Address) InetAddress.getByAddress(ipv4AddressNoZoneBytes(addr));
+ } catch (UnknownHostException e) {
+ throw new IllegalArgumentException("Invalid address " + addr, e);
+ }
+ }
+
+ public final @NonNull Inet6Address inet6AddressFor(final @NonNull A6 addr) {
+ try {
+ return (Inet6Address) InetAddress.getByAddress(ipv6AddressBytes(addr));
+ } catch (UnknownHostException e) {
+ throw new IllegalArgumentException("Invalid address " + addr, e);
+ }
+ }
+
+ public final @NonNull Inet6Address inet6AddressForNoZone(final @NonNull A6NZ addr) {
+ try {
+ return (Inet6Address) InetAddress.getByAddress(ipv6AddressNoZoneBytes(addr));
+ } catch (UnknownHostException e) {
+ throw new IllegalArgumentException("Invalid address " + addr, e);
+ }
+ }
+