IP.java

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