Skip to content

Commit 652168c

Browse files
author
Federico Fissore
committed
Zeroconf services may have multiple IP addresses: let's consider them all
1 parent e6b11c4 commit 652168c

File tree

2 files changed

+32
-27
lines changed

2 files changed

+32
-27
lines changed

app/src/cc/arduino/packages/discoverers/NetworkDiscovery.java

Lines changed: 30 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ public List<BoardPort> discovery() {
3333
Iterator<BoardPort> iterator = ports.iterator();
3434
while (iterator.hasNext()) {
3535
try {
36-
if (!NetUtils.isReachable(InetAddress.getByName(iterator.next().getAddress()))) {
36+
BoardPort board = iterator.next();
37+
if (!NetUtils.isReachable(InetAddress.getByName(board.getAddress()), Integer.parseInt(board.getPrefs().get("port")))) {
3738
iterator.remove();
3839
}
3940
} catch (UnknownHostException e) {
@@ -93,34 +94,38 @@ public void serviceRemoved(ServiceEvent serviceEvent) {
9394
@Override
9495
public void serviceResolved(ServiceEvent serviceEvent) {
9596
ServiceInfo info = serviceEvent.getInfo();
96-
String address = info.getInet4Addresses()[0].getHostAddress();
97-
String name = serviceEvent.getName();
97+
for (InetAddress inetAddress : info.getInet4Addresses()) {
98+
String address = inetAddress.getHostAddress();
99+
String name = serviceEvent.getName();
100+
101+
PreferencesMap prefs = null;
102+
String board = null;
103+
if (info.hasData()) {
104+
prefs = new PreferencesMap();
105+
board = info.getPropertyString("board");
106+
prefs.put("board", board);
107+
prefs.put("distro_version", info.getPropertyString("distro_version"));
108+
}
98109

99-
PreferencesMap prefs = null;
100-
String board = null;
101-
if (info.hasData()) {
102-
prefs = new PreferencesMap();
103-
board = info.getPropertyString("board");
104-
prefs.put("board", board);
105-
prefs.put("distro_version", info.getPropertyString("distro_version"));
106-
}
110+
prefs.put("port", "" + info.getPort());
107111

108-
String label = name + " at " + address;
109-
if (board != null) {
110-
String boardName = Base.getPlatform().resolveDeviceByBoardID(Base.packages, board);
111-
label += " (" + boardName + ")";
112-
}
112+
String label = name + " at " + address;
113+
if (board != null) {
114+
String boardName = Base.getPlatform().resolveDeviceByBoardID(Base.packages, board);
115+
label += " (" + boardName + ")";
116+
}
113117

114-
BoardPort port = new BoardPort();
115-
port.setAddress(address);
116-
port.setBoardName(name);
117-
port.setProtocol("network");
118-
port.setPrefs(prefs);
119-
port.setLabel(label);
118+
BoardPort port = new BoardPort();
119+
port.setAddress(address);
120+
port.setBoardName(name);
121+
port.setProtocol("network");
122+
port.setPrefs(prefs);
123+
port.setLabel(label);
120124

121-
synchronized (this) {
122-
removeDuplicateBoards(port);
123-
ports.add(port);
125+
synchronized (this) {
126+
removeDuplicateBoards(port);
127+
ports.add(port);
128+
}
124129
}
125130
}
126131

app/src/processing/app/helpers/NetUtils.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@
77

88
public abstract class NetUtils {
99

10-
public static boolean isReachable(InetAddress address) {
10+
public static boolean isReachable(InetAddress address, int port) {
1111
Socket socket = null;
1212
try {
1313
socket = new Socket();
14-
socket.connect(new InetSocketAddress(address, 80), 100);
14+
socket.connect(new InetSocketAddress(address, port), 100);
1515
return true;
1616
} catch (IOException e) {
1717
return false;

0 commit comments

Comments
 (0)