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}