mirror of
https://github.com/arduino/Arduino.git
synced 2025-03-14 11:29:26 +01:00
Zeroconf services may have multiple IP addresses: let's consider them all
This commit is contained in:
parent
e6b11c44f6
commit
652168cb03
@ -33,7 +33,8 @@ public class NetworkDiscovery implements Discovery, ServiceListener, cc.arduino.
|
|||||||
Iterator<BoardPort> iterator = ports.iterator();
|
Iterator<BoardPort> iterator = ports.iterator();
|
||||||
while (iterator.hasNext()) {
|
while (iterator.hasNext()) {
|
||||||
try {
|
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();
|
iterator.remove();
|
||||||
}
|
}
|
||||||
} catch (UnknownHostException e) {
|
} catch (UnknownHostException e) {
|
||||||
@ -93,34 +94,38 @@ public class NetworkDiscovery implements Discovery, ServiceListener, cc.arduino.
|
|||||||
@Override
|
@Override
|
||||||
public void serviceResolved(ServiceEvent serviceEvent) {
|
public void serviceResolved(ServiceEvent serviceEvent) {
|
||||||
ServiceInfo info = serviceEvent.getInfo();
|
ServiceInfo info = serviceEvent.getInfo();
|
||||||
String address = info.getInet4Addresses()[0].getHostAddress();
|
for (InetAddress inetAddress : info.getInet4Addresses()) {
|
||||||
String name = serviceEvent.getName();
|
String address = inetAddress.getHostAddress();
|
||||||
|
String name = serviceEvent.getName();
|
||||||
|
|
||||||
PreferencesMap prefs = null;
|
PreferencesMap prefs = null;
|
||||||
String board = null;
|
String board = null;
|
||||||
if (info.hasData()) {
|
if (info.hasData()) {
|
||||||
prefs = new PreferencesMap();
|
prefs = new PreferencesMap();
|
||||||
board = info.getPropertyString("board");
|
board = info.getPropertyString("board");
|
||||||
prefs.put("board", board);
|
prefs.put("board", board);
|
||||||
prefs.put("distro_version", info.getPropertyString("distro_version"));
|
prefs.put("distro_version", info.getPropertyString("distro_version"));
|
||||||
}
|
}
|
||||||
|
|
||||||
String label = name + " at " + address;
|
prefs.put("port", "" + info.getPort());
|
||||||
if (board != null) {
|
|
||||||
String boardName = Base.getPlatform().resolveDeviceByBoardID(Base.packages, board);
|
|
||||||
label += " (" + boardName + ")";
|
|
||||||
}
|
|
||||||
|
|
||||||
BoardPort port = new BoardPort();
|
String label = name + " at " + address;
|
||||||
port.setAddress(address);
|
if (board != null) {
|
||||||
port.setBoardName(name);
|
String boardName = Base.getPlatform().resolveDeviceByBoardID(Base.packages, board);
|
||||||
port.setProtocol("network");
|
label += " (" + boardName + ")";
|
||||||
port.setPrefs(prefs);
|
}
|
||||||
port.setLabel(label);
|
|
||||||
|
|
||||||
synchronized (this) {
|
BoardPort port = new BoardPort();
|
||||||
removeDuplicateBoards(port);
|
port.setAddress(address);
|
||||||
ports.add(port);
|
port.setBoardName(name);
|
||||||
|
port.setProtocol("network");
|
||||||
|
port.setPrefs(prefs);
|
||||||
|
port.setLabel(label);
|
||||||
|
|
||||||
|
synchronized (this) {
|
||||||
|
removeDuplicateBoards(port);
|
||||||
|
ports.add(port);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,11 +7,11 @@ import java.net.Socket;
|
|||||||
|
|
||||||
public abstract class NetUtils {
|
public abstract class NetUtils {
|
||||||
|
|
||||||
public static boolean isReachable(InetAddress address) {
|
public static boolean isReachable(InetAddress address, int port) {
|
||||||
Socket socket = null;
|
Socket socket = null;
|
||||||
try {
|
try {
|
||||||
socket = new Socket();
|
socket = new Socket();
|
||||||
socket.connect(new InetSocketAddress(address, 80), 100);
|
socket.connect(new InetSocketAddress(address, port), 100);
|
||||||
return true;
|
return true;
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
return false;
|
return false;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user