DirectConnectionUtils.java

 1package eu.siacs.conversations.xmpp.jingle;
 2
 3import java.net.InetAddress;
 4import java.net.NetworkInterface;
 5import java.net.SocketException;
 6import java.security.SecureRandom;
 7import java.util.ArrayList;
 8import java.util.Enumeration;
 9import java.util.List;
10import java.util.UUID;
11
12import rocks.xmpp.addr.Jid;
13
14public class DirectConnectionUtils {
15
16    private static List<InetAddress> getLocalAddresses() {
17        final List<InetAddress> addresses = new ArrayList<>();
18        final Enumeration<NetworkInterface> interfaces;
19        try {
20            interfaces = NetworkInterface.getNetworkInterfaces();
21        } catch (SocketException e) {
22            return addresses;
23        }
24        while (interfaces.hasMoreElements()) {
25            NetworkInterface networkInterface = interfaces.nextElement();
26            final Enumeration<InetAddress> inetAddressEnumeration = networkInterface.getInetAddresses();
27            while (inetAddressEnumeration.hasMoreElements()) {
28                final InetAddress inetAddress = inetAddressEnumeration.nextElement();
29                if (!inetAddress.isLoopbackAddress()) {
30                    addresses.add(inetAddress);
31                }
32            }
33        }
34        return addresses;
35    }
36
37    public static List<JingleCandidate> getLocalCandidates(Jid jid) {
38        SecureRandom random = new SecureRandom();
39        ArrayList<JingleCandidate> candidates = new ArrayList<>();
40        for (InetAddress inetAddress : getLocalAddresses()) {
41            final JingleCandidate candidate = new JingleCandidate(UUID.randomUUID().toString(), true);
42            candidate.setHost(inetAddress.getHostAddress());
43            candidate.setPort(random.nextInt(60000) + 1024);
44            candidate.setType(JingleCandidate.TYPE_DIRECT);
45            candidate.setJid(jid);
46            candidate.setPriority(8257536 + candidates.size());
47            candidates.add(candidate);
48        }
49        return candidates;
50    }
51
52}