diff --git a/rosjava/src/main/java/org/ros/address/InetAddressFactory.java b/rosjava/src/main/java/org/ros/address/InetAddressFactory.java index 0d69a973f93d7018ec34ca5e9a77405fcd1323aa..dc36fc6d48d204894cdf10882b289984a001aada 100644 --- a/rosjava/src/main/java/org/ros/address/InetAddressFactory.java +++ b/rosjava/src/main/java/org/ros/address/InetAddressFactory.java @@ -25,6 +25,7 @@ import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.net.UnknownHostException; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; @@ -43,13 +44,7 @@ public class InetAddressFactory { return address.getAddress().length == 4; } - private static Collection<InetAddress> getAllInetAddresses() { - List<NetworkInterface> networkInterfaces; - try { - networkInterfaces = Collections.list(NetworkInterface.getNetworkInterfaces()); - } catch (SocketException e) { - throw new RosRuntimeException(e); - } + private static List<InetAddress> listAllInetAddress (Collection<NetworkInterface> networkInterfaces) { List<InetAddress> inetAddresses = Lists.newArrayList(); for (NetworkInterface networkInterface : networkInterfaces) { try { @@ -63,8 +58,18 @@ public class InetAddressFactory { return inetAddresses; } - public static InetAddress newNonLoopback() { - for (InetAddress address : getAllInetAddresses()) { + private static Collection<InetAddress> getAllInetAddresses() { + List<NetworkInterface> networkInterfaces; + try { + networkInterfaces = Collections.list(NetworkInterface.getNetworkInterfaces()); + } catch (SocketException e) { + throw new RosRuntimeException(e); + } + return listAllInetAddress(networkInterfaces); + } + + private static InetAddress filterInetAddresses (Collection<InetAddress> inetAddresses) { + for (InetAddress address : inetAddresses) { // IPv4 only for now. if (!address.isLoopbackAddress() && isIpv4(address)) { return address; @@ -73,6 +78,14 @@ public class InetAddressFactory { throw new RosRuntimeException("No non-loopback interface found."); } + public static InetAddress newNonLoopback() { + return filterInetAddresses(getAllInetAddresses()); + } + + public static InetAddress newNonLoopbackForNetworkInterface(NetworkInterface networkInterface) { + return filterInetAddresses(Collections.list(networkInterface.getInetAddresses())); + } + private static Collection<InetAddress> getAllInetAddressByName(String host) { InetAddress[] allAddressesByName; try {