package fr.imag.adele.apam.distriman.discovery;
import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.jmdns.NetworkTopologyDiscovery;
/**
* Factory that determines the euristics to choose/filter the network cards to
* be considered
*
* @author jnascimento
*
*/
public class NetworkTopology implements NetworkTopologyDiscovery {
@Override
public InetAddress[] getInetAddresses() {
List<InetAddress> addresses = new ArrayList<InetAddress>();
try {
for (NetworkInterface ni : Collections.list(NetworkInterface
.getNetworkInterfaces())) {
for (InetAddress inetAddress : Collections.list(ni
.getInetAddresses())) {
if (!this.useInetAddress(ni, inetAddress)) {
continue;
}
addresses.add(inetAddress);
}
}
return addresses.toArray(new InetAddress[0]);
} catch (SocketException e) {
e.printStackTrace();
}
return null;
}
@Override
public void lockInetAddress(InetAddress arg0) {
}
@Override
public void unlockInetAddress(InetAddress arg0) {
}
@Override
public boolean useInetAddress(NetworkInterface networkInterface,
InetAddress interfaceAddress) {
if (interfaceAddress instanceof Inet6Address
// TODO in the future hide localhost ||
// !interfaceAddress.isLoopbackAddress()
) {
return false;
}
return true;
}
}