Skip to content

Update jmdns to 3.5.1 #5879

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Feb 10, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .classpath
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@
<classpathentry kind="lib" path="app/lib/commons-httpclient-3.1.jar"/>
<classpathentry kind="lib" path="app/lib/commons-logging-1.0.4.jar"/>
<classpathentry kind="lib" path="app/lib/commons-net-3.3.jar"/>
<classpathentry kind="lib" path="app/lib/jmdns-3.4.1.jar"/>
<classpathentry kind="lib" path="app/lib/jmdns-3.5.1.jar"/>
<classpathentry kind="lib" path="app/lib/slf4j-api-1.7.22.jar"/>
<classpathentry kind="lib" path="app/lib/jsch-0.1.50.jar"/>
<classpathentry kind="lib" path="app/lib/jssc-2.8.0.jar"/>
<classpathentry kind="lib" path="app/lib/bcpg-jdk15on-152.jar"/>
Expand Down
4 changes: 3 additions & 1 deletion app/.classpath
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,9 @@
<classpathentry kind="lib" path="lib/jackson-databind-2.6.3.jar"/>
<classpathentry kind="lib" path="lib/jackson-module-mrbean-2.6.3.jar"/>
<classpathentry kind="lib" path="lib/java-semver-0.8.0.jar"/>
<classpathentry kind="lib" path="lib/jmdns-3.4.1.jar"/>
<classpathentry kind="lib" path="lib/jmdns-3.5.1.jar"/>
<classpathentry kind="lib" path="lib/slf4j-api-1.7.22.jar"/>
<classpathentry kind="lib" path="lib/slf4j-simple-1.7.22.jar"/>
<classpathentry kind="lib" path="lib/jsch-0.1.50.jar"/>
<classpathentry kind="lib" path="lib/jssc-2.8.0.jar"/>
<classpathentry kind="lib" path="lib/rsyntaxtextarea-2.5.8.1+arduino.jar"/>
Expand Down
Binary file removed app/lib/jmdns-3.4.1.jar
Binary file not shown.
Binary file added app/lib/jmdns-3.5.1.jar
Binary file not shown.
4 changes: 2 additions & 2 deletions app/lib/jmdns.LICENSE.ASL-2.0-LGPL-2.1.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
https://jmdns.svn.sourceforge.net/svnroot/jmdns/tags/jmdns-3.4.1/LICENSE-LGPL.txt
https://jmdns.svn.sourceforge.net/svnroot/jmdns/tags/jmdns-3.4.1/LICENSE
https://jmdns.svn.sourceforge.net/svnroot/jmdns/tags/jmdns-3.5.1/LICENSE-LGPL.txt
https://jmdns.svn.sourceforge.net/svnroot/jmdns/tags/jmdns-3.5.1/LICENSE
Binary file added app/lib/slf4j-api-1.7.22.jar
Binary file not shown.
Binary file added app/lib/slf4j-simple-1.7.22.jar
Binary file not shown.
4 changes: 3 additions & 1 deletion arduino-core/.classpath
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
<classpathentry kind="lib" path="lib/apple.jar"/>
<classpathentry kind="lib" path="lib/commons-logging-1.0.4.jar"/>
<classpathentry kind="lib" path="lib/commons-net-3.3.jar"/>
<classpathentry kind="lib" path="lib/jmdns-3.4.1.jar"/>
<classpathentry kind="lib" path="lib/jmdns-3.5.1.jar"/>
<classpathentry kind="lib" path="lib/slf4j-api-1.7.22.jar"/>
<classpathentry kind="lib" path="lib/slf4j-simple-1.7.22.jar"/>
<classpathentry kind="lib" path="lib/jssc-2.8.0.jar"/>
<classpathentry kind="lib" path="lib/jsch-0.1.50.jar"/>
<classpathentry kind="lib" path="lib/commons-exec-1.1.jar"/>
Expand Down
Binary file removed arduino-core/lib/jmdns-3.4.1.jar
Binary file not shown.
Binary file added arduino-core/lib/jmdns-3.5.1.jar
Binary file not shown.
4 changes: 2 additions & 2 deletions arduino-core/lib/jmdns.LICENSE.ASL-2.0-LGPL-2.1.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
https://jmdns.svn.sourceforge.net/svnroot/jmdns/tags/jmdns-3.4.1/LICENSE-LGPL.txt
https://jmdns.svn.sourceforge.net/svnroot/jmdns/tags/jmdns-3.4.1/LICENSE
https://jmdns.svn.sourceforge.net/svnroot/jmdns/tags/jmdns-3.5.1/LICENSE-LGPL.txt
https://jmdns.svn.sourceforge.net/svnroot/jmdns/tags/jmdns-3.5.1/LICENSE
Binary file added arduino-core/lib/slf4j-api-1.7.22.jar
Binary file not shown.
Binary file added arduino-core/lib/slf4j-simple-1.7.22.jar
Binary file not shown.
150 changes: 59 additions & 91 deletions arduino-core/src/cc/arduino/packages/discoverers/NetworkDiscovery.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,89 +31,38 @@

import cc.arduino.packages.BoardPort;
import cc.arduino.packages.Discovery;
import cc.arduino.packages.discoverers.network.BoardReachabilityFilter;
import cc.arduino.packages.discoverers.network.NetworkChecker;
import org.apache.commons.compress.utils.IOUtils;
import processing.app.BaseNoGui;
import processing.app.zeroconf.jmdns.ArduinoDNSTaskStarter;

import javax.jmdns.*;
import javax.jmdns.impl.DNSTaskStarter;
import java.io.IOException;
import java.net.InetAddress;
import java.util.*;

public class NetworkDiscovery implements Discovery, ServiceListener, cc.arduino.packages.discoverers.network.NetworkTopologyListener {

private static final int MAX_TIME_AWAITING_FOR_PACKAGES = 5000;

private final List<BoardPort> boardPortsDiscoveredWithJmDNS;
private final Map<InetAddress, JmDNS> mappedJmDNSs;
private Timer networkCheckerTimer;
private Timer boardReachabilityFilterTimer;
private final List<BoardPort> reachableBoardPorts;

public NetworkDiscovery() {
DNSTaskStarter.Factory.setClassDelegate(new ArduinoDNSTaskStarter());
this.boardPortsDiscoveredWithJmDNS = new LinkedList<>();
this.mappedJmDNSs = new Hashtable<>();
this.reachableBoardPorts = new LinkedList<>();
}
import cc.arduino.packages.discoverers.network.BoardReachabilityFilter;

@Override
public List<BoardPort> listDiscoveredBoards() {
synchronized (reachableBoardPorts) {
return new LinkedList<>(reachableBoardPorts);
}
}
public class NetworkDiscovery implements Discovery, ServiceListener {

@Override
public List<BoardPort> listDiscoveredBoards(boolean complete) {
synchronized (reachableBoardPorts) {
return new LinkedList<>(reachableBoardPorts);
}
}
private static final int MAX_TIME_AWAITING_FOR_PACKAGES = 5000;

public void setReachableBoardPorts(List<BoardPort> newReachableBoardPorts) {
synchronized (reachableBoardPorts) {
this.reachableBoardPorts.clear();
this.reachableBoardPorts.addAll(newReachableBoardPorts);
}
}
private final List<BoardPort> reachableBoardPorts = new LinkedList<>();
private final List<BoardPort> boardPortsDiscoveredWithJmDNS = new LinkedList<>();
private Timer reachabilityTimer;
private JmmDNS jmdns = null;

public List<BoardPort> getBoardPortsDiscoveredWithJmDNS() {
private void removeDuplicateBoards(BoardPort newBoard) {
synchronized (boardPortsDiscoveredWithJmDNS) {
return new LinkedList<>(boardPortsDiscoveredWithJmDNS);
Iterator<BoardPort> iterator = boardPortsDiscoveredWithJmDNS.iterator();
while (iterator.hasNext()) {
BoardPort board = iterator.next();
if (newBoard.getAddress().equals(board.getAddress())) {
iterator.remove();
}
}
}
}

@Override
public void start() throws IOException {
this.networkCheckerTimer = new Timer(NetworkChecker.class.getName());
new NetworkChecker(this, NetworkTopologyDiscovery.Factory.getInstance()).start(networkCheckerTimer);
this.boardReachabilityFilterTimer = new Timer(BoardReachabilityFilter.class.getName());
new BoardReachabilityFilter(this).start(boardReachabilityFilterTimer);
}

@Override
public void stop() throws IOException {
this.networkCheckerTimer.purge();
this.boardReachabilityFilterTimer.purge();
// we don't close each JmDNS instance as it's too slow
}

@Override
public void serviceAdded(ServiceEvent serviceEvent) {
String type = serviceEvent.getType();
String name = serviceEvent.getName();

JmDNS dns = serviceEvent.getDNS();

dns.requestServiceInfo(type, name);
ServiceInfo serviceInfo = dns.getServiceInfo(type, name);
if (serviceInfo != null) {
dns.requestServiceInfo(type, name);
}
}

@Override
Expand All @@ -126,11 +75,9 @@ public void serviceRemoved(ServiceEvent serviceEvent) {

@Override
public void serviceResolved(ServiceEvent serviceEvent) {
int sleptFor = 0;
while (BaseNoGui.packages == null && sleptFor <= MAX_TIME_AWAITING_FOR_PACKAGES) {
while (BaseNoGui.packages == null) {
try {
Thread.sleep(1000);
sleptFor += 1000;
} catch (InterruptedException e) {
e.printStackTrace();
}
Expand All @@ -151,7 +98,7 @@ public void serviceResolved(ServiceEvent serviceEvent) {
port.getPrefs().put("board", board);
port.getPrefs().put("distro_version", info.getPropertyString("distro_version"));
port.getPrefs().put("port", "" + info.getPort());

//Add additional fields to permit generic ota updates
//and make sure we do not intefere with Arduino boards
// define "ssh_upload=no" TXT property to use generic uploader
Expand Down Expand Up @@ -190,35 +137,56 @@ public void serviceResolved(ServiceEvent serviceEvent) {
}
}

private void removeDuplicateBoards(BoardPort newBoard) {
synchronized (boardPortsDiscoveredWithJmDNS) {
Iterator<BoardPort> iterator = boardPortsDiscoveredWithJmDNS.iterator();
while (iterator.hasNext()) {
BoardPort board = iterator.next();
if (newBoard.getAddress().equals(board.getAddress())) {
iterator.remove();
}
}
}
public NetworkDiscovery() {

}

@Override
public void inetAddressAdded(InetAddress address) {
if (mappedJmDNSs.containsKey(address)) {
return;
}
public void start() {
jmdns = JmmDNS.Factory.getInstance();
jmdns.addServiceListener("_arduino._tcp.local.", this);
reachabilityTimer = new Timer();
new BoardReachabilityFilter(this).start(reachabilityTimer);
}

@Override
public void stop() {
jmdns.unregisterAllServices();
// we don't close the JmmDNS instance as it's too slow
/*
try {
JmDNS jmDNS = JmDNS.create(address);
jmDNS.addServiceListener("_arduino._tcp.local.", this);
mappedJmDNSs.put(address, jmDNS);
} catch (Exception e) {
jmdns.close();
} catch (IOException e) {
e.printStackTrace();
}
*/
reachabilityTimer.cancel();
}

@Override
public void inetAddressRemoved(InetAddress address) {
JmDNS jmDNS = mappedJmDNSs.remove(address);
IOUtils.closeQuietly(jmDNS);
public List<BoardPort> listDiscoveredBoards() {
synchronized (reachableBoardPorts) {
return new LinkedList<>(reachableBoardPorts);
}
}

@Override
public List<BoardPort> listDiscoveredBoards(boolean complete) {
synchronized (reachableBoardPorts) {
return new LinkedList<>(reachableBoardPorts);
}
}

public void setReachableBoardPorts(List<BoardPort> newReachableBoardPorts) {
synchronized (reachableBoardPorts) {
this.reachableBoardPorts.clear();
this.reachableBoardPorts.addAll(newReachableBoardPorts);
}
}

public List<BoardPort> getBoardPortsDiscoveredWithJmDNS() {
synchronized (boardPortsDiscoveredWithJmDNS) {
return new LinkedList<>(boardPortsDiscoveredWithJmDNS);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,23 +34,28 @@
import processing.app.helpers.NetUtils;

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.util.Enumeration;
import java.net.UnknownHostException;
import java.util.*;

public class BoardReachabilityFilter extends TimerTask {

private final NetworkDiscovery networkDiscovery;
private Enumeration<NetworkInterface> staticNetworkInterfaces;
private final List<String> staticNetworkInterfacesList = new LinkedList<>();

public BoardReachabilityFilter(NetworkDiscovery networkDiscovery) {
this.networkDiscovery = networkDiscovery;
}

public void start(Timer timer) {
timer.schedule(this, 0, 3000);
timer.schedule(this, 0, 5000);
}

@Override
public void run() {

List<BoardPort> boardPorts = networkDiscovery.getBoardPortsDiscoveredWithJmDNS();

Iterator<BoardPort> boardPortIterator = boardPorts.iterator();
Expand Down

This file was deleted.

Loading