Skip to content

Commit 3fec636

Browse files
author
Federico Fissore
committed
An attempt to improve Yun's discovery. Thanks @roadfun. See #2576
1 parent bedc550 commit 3fec636

File tree

2 files changed

+25
-9
lines changed

2 files changed

+25
-9
lines changed

arduino-core/src/cc/arduino/packages/discoverers/NetworkDiscovery.java

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -58,19 +58,35 @@ public NetworkDiscovery() {
5858

5959
@Override
6060
public List<BoardPort> discovery() {
61-
List<BoardPort> ports = clonePortsList();
62-
Iterator<BoardPort> iterator = ports.iterator();
63-
while (iterator.hasNext()) {
61+
List<BoardPort> boardPorts = clonePortsList();
62+
Iterator<BoardPort> boardPortIterator = boardPorts.iterator();
63+
while (boardPortIterator.hasNext()) {
6464
try {
65-
BoardPort board = iterator.next();
66-
if (!NetUtils.isReachable(InetAddress.getByName(board.getAddress()), Integer.parseInt(board.getPrefs().get("port")))) {
67-
iterator.remove();
65+
BoardPort board = boardPortIterator.next();
66+
67+
InetAddress inetAddress = InetAddress.getByName(board.getAddress());
68+
int broadcastedPort = Integer.valueOf(board.getPrefs().get("port"));
69+
70+
List<Integer> ports = new LinkedList<Integer>();
71+
ports.add(broadcastedPort);
72+
73+
//dirty code: allows non up to date yuns to be discovered. Newer yuns will broadcast port 22
74+
if (broadcastedPort == 80) {
75+
ports.add(0, 22);
76+
}
77+
78+
boolean reachable = false;
79+
for (Integer port : ports) {
80+
reachable = reachable || NetUtils.isReachable(inetAddress, port);
81+
}
82+
if (!reachable) {
83+
boardPortIterator.remove();
6884
}
6985
} catch (UnknownHostException e) {
70-
iterator.remove();
86+
boardPortIterator.remove();
7187
}
7288
}
73-
return ports;
89+
return boardPorts;
7490
}
7591

7692
private List<BoardPort> clonePortsList() {

arduino-core/src/processing/app/helpers/NetUtils.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public static boolean isReachable(InetAddress address, int port) {
1111
Socket socket = null;
1212
try {
1313
socket = new Socket();
14-
socket.connect(new InetSocketAddress(address, port), 100);
14+
socket.connect(new InetSocketAddress(address, port), 300);
1515
return true;
1616
} catch (IOException e) {
1717
return false;

0 commit comments

Comments
 (0)