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() || inetAddress.isLinkLocalAddress()) {
30                    continue;
31                }
32                addresses.add(inetAddress);
33            }
34        }
35        return addresses;
36    }
37
38    public static List<JingleCandidate> getLocalCandidates(Jid jid) {
39        SecureRandom random = new SecureRandom();
40        ArrayList<JingleCandidate> candidates = new ArrayList<>();
41        for (InetAddress inetAddress : getLocalAddresses()) {
42            final JingleCandidate candidate = new JingleCandidate(UUID.randomUUID().toString(), true);
43            candidate.setHost(inetAddress.getHostAddress());
44            candidate.setPort(random.nextInt(60000) + 1024);
45            candidate.setType(JingleCandidate.TYPE_DIRECT);
46            candidate.setJid(jid);
47            candidate.setPriority(8257536 + candidates.size());
48            candidates.add(candidate);
49        }
50        return candidates;
51    }
52
53}