Merge
This commit is contained in:
commit
e895ceca18
@ -50,10 +50,11 @@ class DefaultInterface {
|
||||
}
|
||||
|
||||
/**
|
||||
* Choose a default interface. This method returns an interface that is
|
||||
* both "up" and supports multicast. This method choses an interface in
|
||||
* Choose a default interface. This method returns the first interface that
|
||||
* is both "up" and supports multicast. This method chooses an interface in
|
||||
* order of preference:
|
||||
* 1. neither loopback nor point to point
|
||||
* ( prefer interfaces with dual IP support )
|
||||
* 2. point to point
|
||||
* 3. loopback
|
||||
*
|
||||
@ -66,32 +67,56 @@ class DefaultInterface {
|
||||
try {
|
||||
nifs = NetworkInterface.getNetworkInterfaces();
|
||||
} catch (IOException ignore) {
|
||||
// unable to enumate network interfaces
|
||||
// unable to enumerate network interfaces
|
||||
return null;
|
||||
}
|
||||
|
||||
NetworkInterface preferred = null;
|
||||
NetworkInterface ppp = null;
|
||||
NetworkInterface loopback = null;
|
||||
|
||||
while (nifs.hasMoreElements()) {
|
||||
NetworkInterface ni = nifs.nextElement();
|
||||
try {
|
||||
if (ni.isUp() && ni.supportsMulticast()) {
|
||||
boolean isLoopback = ni.isLoopback();
|
||||
boolean isPPP = ni.isPointToPoint();
|
||||
if (!isLoopback && !isPPP) {
|
||||
// found an interface that is not the loopback or a
|
||||
// point-to-point interface
|
||||
if (!ni.isUp() || !ni.supportsMulticast())
|
||||
continue;
|
||||
|
||||
boolean ip4 = false, ip6 = false;
|
||||
Enumeration<InetAddress> addrs = ni.getInetAddresses();
|
||||
while (addrs.hasMoreElements()) {
|
||||
InetAddress addr = addrs.nextElement();
|
||||
if (!addr.isAnyLocalAddress()) {
|
||||
if (addr instanceof Inet4Address) {
|
||||
ip4 = true;
|
||||
} else if (addr instanceof Inet6Address) {
|
||||
ip6 = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
boolean isLoopback = ni.isLoopback();
|
||||
boolean isPPP = ni.isPointToPoint();
|
||||
if (!isLoopback && !isPPP) {
|
||||
// found an interface that is not the loopback or a
|
||||
// point-to-point interface
|
||||
if (preferred == null) {
|
||||
preferred = ni;
|
||||
} else if (ip4 && ip6){
|
||||
return ni;
|
||||
}
|
||||
if (ppp == null && isPPP)
|
||||
ppp = ni;
|
||||
if (loopback == null && isLoopback)
|
||||
loopback = ni;
|
||||
}
|
||||
if (ppp == null && isPPP)
|
||||
ppp = ni;
|
||||
if (loopback == null && isLoopback)
|
||||
loopback = ni;
|
||||
|
||||
} catch (IOException skip) { }
|
||||
}
|
||||
|
||||
return (ppp != null) ? ppp : loopback;
|
||||
if (preferred != null) {
|
||||
return preferred;
|
||||
} else {
|
||||
return (ppp != null) ? ppp : loopback;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user