From 652168cb0336a25acc320f61e72a6b53e565e9fd Mon Sep 17 00:00:00 2001 From: Federico Fissore Date: Mon, 22 Jul 2013 10:06:21 +0200 Subject: [PATCH] Zeroconf services may have multiple IP addresses: let's consider them all --- .../discoverers/NetworkDiscovery.java | 55 ++++++++++--------- app/src/processing/app/helpers/NetUtils.java | 4 +- 2 files changed, 32 insertions(+), 27 deletions(-) diff --git a/app/src/cc/arduino/packages/discoverers/NetworkDiscovery.java b/app/src/cc/arduino/packages/discoverers/NetworkDiscovery.java index 9fa41b30f..6cf724277 100644 --- a/app/src/cc/arduino/packages/discoverers/NetworkDiscovery.java +++ b/app/src/cc/arduino/packages/discoverers/NetworkDiscovery.java @@ -33,7 +33,8 @@ public class NetworkDiscovery implements Discovery, ServiceListener, cc.arduino. Iterator iterator = ports.iterator(); while (iterator.hasNext()) { try { - if (!NetUtils.isReachable(InetAddress.getByName(iterator.next().getAddress()))) { + BoardPort board = iterator.next(); + if (!NetUtils.isReachable(InetAddress.getByName(board.getAddress()), Integer.parseInt(board.getPrefs().get("port")))) { iterator.remove(); } } catch (UnknownHostException e) { @@ -93,34 +94,38 @@ public class NetworkDiscovery implements Discovery, ServiceListener, cc.arduino. @Override public void serviceResolved(ServiceEvent serviceEvent) { ServiceInfo info = serviceEvent.getInfo(); - String address = info.getInet4Addresses()[0].getHostAddress(); - String name = serviceEvent.getName(); + for (InetAddress inetAddress : info.getInet4Addresses()) { + String address = inetAddress.getHostAddress(); + String name = serviceEvent.getName(); - PreferencesMap prefs = null; - String board = null; - if (info.hasData()) { - prefs = new PreferencesMap(); - board = info.getPropertyString("board"); - prefs.put("board", board); - prefs.put("distro_version", info.getPropertyString("distro_version")); - } + PreferencesMap prefs = null; + String board = null; + if (info.hasData()) { + prefs = new PreferencesMap(); + board = info.getPropertyString("board"); + prefs.put("board", board); + prefs.put("distro_version", info.getPropertyString("distro_version")); + } - String label = name + " at " + address; - if (board != null) { - String boardName = Base.getPlatform().resolveDeviceByBoardID(Base.packages, board); - label += " (" + boardName + ")"; - } + prefs.put("port", "" + info.getPort()); - BoardPort port = new BoardPort(); - port.setAddress(address); - port.setBoardName(name); - port.setProtocol("network"); - port.setPrefs(prefs); - port.setLabel(label); + String label = name + " at " + address; + if (board != null) { + String boardName = Base.getPlatform().resolveDeviceByBoardID(Base.packages, board); + label += " (" + boardName + ")"; + } - synchronized (this) { - removeDuplicateBoards(port); - ports.add(port); + BoardPort port = new BoardPort(); + port.setAddress(address); + port.setBoardName(name); + port.setProtocol("network"); + port.setPrefs(prefs); + port.setLabel(label); + + synchronized (this) { + removeDuplicateBoards(port); + ports.add(port); + } } } diff --git a/app/src/processing/app/helpers/NetUtils.java b/app/src/processing/app/helpers/NetUtils.java index 312205fce..c67245801 100644 --- a/app/src/processing/app/helpers/NetUtils.java +++ b/app/src/processing/app/helpers/NetUtils.java @@ -7,11 +7,11 @@ import java.net.Socket; public abstract class NetUtils { - public static boolean isReachable(InetAddress address) { + public static boolean isReachable(InetAddress address, int port) { Socket socket = null; try { socket = new Socket(); - socket.connect(new InetSocketAddress(address, 80), 100); + socket.connect(new InetSocketAddress(address, port), 100); return true; } catch (IOException e) { return false;