You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ta...@apache.org on 2015/01/15 19:44:31 UTC
qpid-jms git commit: Some initial improvements to the discovery agent
to prevent unable to bind on some hosts.
Repository: qpid-jms
Updated Branches:
refs/heads/master 5dd7ca555 -> d08df5c1e
Some initial improvements to the discovery agent to prevent unable to
bind on some hosts.
Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/d08df5c1
Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/d08df5c1
Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/d08df5c1
Branch: refs/heads/master
Commit: d08df5c1e4ca0fbfe6c7ec7b240142deb462777d
Parents: 5dd7ca5
Author: Timothy Bish <ta...@gmail.com>
Authored: Thu Jan 15 13:44:21 2015 -0500
Committer: Timothy Bish <ta...@gmail.com>
Committed: Thu Jan 15 13:44:21 2015 -0500
----------------------------------------------------------------------
.../multicast/MulticastDiscoveryAgent.java | 49 ++++++++++++++++++++
1 file changed, 49 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/d08df5c1/qpid-jms-discovery/src/main/java/org/apache/qpid/jms/provider/discovery/multicast/MulticastDiscoveryAgent.java
----------------------------------------------------------------------
diff --git a/qpid-jms-discovery/src/main/java/org/apache/qpid/jms/provider/discovery/multicast/MulticastDiscoveryAgent.java b/qpid-jms-discovery/src/main/java/org/apache/qpid/jms/provider/discovery/multicast/MulticastDiscoveryAgent.java
index 96c23cc..cacd1af 100644
--- a/qpid-jms-discovery/src/main/java/org/apache/qpid/jms/provider/discovery/multicast/MulticastDiscoveryAgent.java
+++ b/qpid-jms-discovery/src/main/java/org/apache/qpid/jms/provider/discovery/multicast/MulticastDiscoveryAgent.java
@@ -20,13 +20,19 @@ import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.InetSocketAddress;
+import java.net.InterfaceAddress;
import java.net.MulticastSocket;
import java.net.NetworkInterface;
import java.net.SocketAddress;
+import java.net.SocketException;
import java.net.SocketTimeoutException;
import java.net.URI;
import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Enumeration;
import java.util.Iterator;
+import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -144,6 +150,8 @@ public class MulticastDiscoveryAgent implements DiscoveryAgent, Runnable {
}
if (mcNetworkInterface != null) {
mcast.setNetworkInterface(NetworkInterface.getByName(mcNetworkInterface));
+ } else {
+ trySetNetworkInterface(mcast);
}
runner = new Thread(this);
runner.setName(this.toString() + ":" + runner.getName());
@@ -366,6 +374,47 @@ public class MulticastDiscoveryAgent implements DiscoveryAgent, Runnable {
this.parser = parser;
}
+ private void trySetNetworkInterface(MulticastSocket mcastSock) throws SocketException {
+ List<NetworkInterface> interfaces = findNetworkInterface();
+ SocketException lastError = null;
+
+ for (NetworkInterface networkInterface : interfaces) {
+ try {
+ mcastSock.setNetworkInterface(networkInterface);
+ break;
+ } catch (SocketException error) {
+ lastError = error;
+ }
+ }
+
+ if (mcastSock.getNetworkInterface() == null) {
+ if (lastError != null) {
+ throw lastError;
+ } else {
+ throw new SocketException("No NetworkInterface available for this socket.");
+ }
+ }
+ }
+
+ private List<NetworkInterface> findNetworkInterface() throws SocketException {
+ Enumeration<NetworkInterface> ifcs = NetworkInterface.getNetworkInterfaces();
+ List<NetworkInterface> interfaces = new ArrayList<NetworkInterface>();
+ while (ifcs.hasMoreElements()) {
+ NetworkInterface ni = ifcs.nextElement();
+ if (ni.supportsMulticast() && ni.isUp()) {
+ for (InterfaceAddress ia : ni.getInterfaceAddresses()) {
+ if (ia.getAddress() instanceof java.net.Inet4Address &&
+ !ia.getAddress().isLoopbackAddress() &&
+ !ni.getDisplayName().startsWith("vnic")) {
+ interfaces.add(ni);
+ }
+ }
+ }
+ }
+
+ return interfaces.isEmpty() ? Collections.<NetworkInterface>emptyList() : interfaces;
+ }
+
// ---------- Discovered Peer Bookkeeping Class ---------------------------//
private static class RemoteBrokerData extends DiscoveryEvent {
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org