1package eu.siacs.conversations.xmpp.jingle;
 2
 3import com.google.common.collect.ImmutableList;
 4
 5import java.net.Inet6Address;
 6import java.net.InetAddress;
 7import java.net.NetworkInterface;
 8import java.net.SocketException;
 9import java.net.UnknownHostException;
10import java.security.SecureRandom;
11import java.util.ArrayList;
12import java.util.Enumeration;
13import java.util.List;
14import java.util.UUID;
15
16import eu.siacs.conversations.xmpp.Jid;
17
18public class DirectConnectionUtils {
19
20    public static List<InetAddress> getLocalAddresses() {
21        final ImmutableList.Builder<InetAddress> inetAddresses = new ImmutableList.Builder<>();
22        final Enumeration<NetworkInterface> interfaces;
23        try {
24            interfaces = NetworkInterface.getNetworkInterfaces();
25        } catch (final SocketException e) {
26            return inetAddresses.build();
27        }
28        while (interfaces.hasMoreElements()) {
29            NetworkInterface networkInterface = interfaces.nextElement();
30            final Enumeration<InetAddress> inetAddressEnumeration = networkInterface.getInetAddresses();
31            while (inetAddressEnumeration.hasMoreElements()) {
32                final InetAddress inetAddress = inetAddressEnumeration.nextElement();
33                if (inetAddress.isLoopbackAddress() || inetAddress.isLinkLocalAddress()) {
34                    continue;
35                }
36                if (inetAddress instanceof Inet6Address) {
37                    //let's get rid of scope
38                    try {
39                        inetAddresses.add(Inet6Address.getByAddress(inetAddress.getAddress()));
40                    } catch (UnknownHostException e) {
41                        //ignored
42                    }
43                } else {
44                    inetAddresses.add(inetAddress);
45                }
46            }
47        }
48        return inetAddresses.build();
49    }
50}