File tree Expand file tree Collapse file tree 2 files changed +49
-9
lines changed
cc/arduino/packages/discoverers Expand file tree Collapse file tree 2 files changed +49
-9
lines changed Original file line number Diff line number Diff line change @@ -58,19 +58,32 @@ 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 = NetUtils .isReachable (inetAddress , ports );
79+ if (!reachable ) {
80+ boardPortIterator .remove ();
6881 }
6982 } catch (UnknownHostException e ) {
70- iterator .remove ();
83+ boardPortIterator .remove ();
7184 }
7285 }
73- return ports ;
86+ return boardPorts ;
7487 }
7588
7689 private List <BoardPort > clonePortsList () {
Original file line number Diff line number Diff line change 44import java .net .InetAddress ;
55import java .net .InetSocketAddress ;
66import java .net .Socket ;
7+ import java .util .Arrays ;
8+ import java .util .List ;
79
810public abstract class NetUtils {
911
12+ private static boolean isReachableByEcho (InetAddress address ) {
13+ try {
14+ return address .isReachable (100 );
15+ } catch (IOException e ) {
16+ return false ;
17+ }
18+ }
19+
1020 public static boolean isReachable (InetAddress address , int port ) {
21+ return isReachable (address , Arrays .asList (port ));
22+ }
23+
24+ public static boolean isReachable (InetAddress address , List <Integer > ports ) {
25+ if (isReachableByEcho (address )) {
26+ return true ;
27+ }
28+
29+ boolean reachable = false ;
30+ for (Integer port : ports ) {
31+ reachable = reachable || isPortOpen (address , port );
32+ }
33+
34+ return reachable ;
35+ }
36+
37+ private static boolean isPortOpen (InetAddress address , int port ) {
1138 Socket socket = null ;
1239 try {
1340 socket = new Socket ();
14- socket .connect (new InetSocketAddress (address , port ), 100 );
41+ socket .connect (new InetSocketAddress (address , port ), 300 );
1542 return true ;
1643 } catch (IOException e ) {
1744 return false ;
You can’t perform that action at this time.
0 commit comments