IP.java

 1package eu.siacs.conversations.utils;
 2
 3import com.google.common.net.InetAddresses;
 4import java.net.InetAddress;
 5
 6public class IP {
 7
 8    public static boolean matches(final String server) {
 9        return server != null
10                && (Patterns.IPV4.matcher(server).matches()
11                        || Patterns.IPV6.matcher(server).matches()
12                        || Patterns.IPV6_6HEX4DEC.matcher(server).matches()
13                        || Patterns.IPV6_HEX4_DECOMPRESSED.matcher(server).matches()
14                        || Patterns.IPV6_HEX_COMPRESSED.matcher(server).matches());
15    }
16
17    public static String wrapIPv6(final String host) {
18        if (InetAddresses.isInetAddress(host)) {
19            final InetAddress inetAddress;
20            try {
21                inetAddress = InetAddresses.forString(host);
22            } catch (final IllegalArgumentException e) {
23                return host;
24            }
25            return InetAddresses.toUriString(inetAddress);
26        } else {
27            return host;
28        }
29    }
30
31    public static String unwrapIPv6(final String host) {
32        if (host.length() > 2 && host.charAt(0) == '[' && host.charAt(host.length() - 1) == ']') {
33            final String ip = host.substring(1, host.length() - 1);
34            if (InetAddresses.isInetAddress(ip)) {
35                return ip;
36            }
37        }
38        return host;
39    }
40}