Resent because the mailing list stripped the attachment.
I've created a patch for trunk that adds a SocketAddress
getRemoteSocketAddress() method to
org.apache.activemq.transport.Transport and all implementing classes.
I would like this to be submitted to trunk. If not, it's here for other
people to find in the list archives.
Thanks,
James
Index:
activemq-optional/src/main/java/org/apache/activemq/transport/http/HttpTransportSupport.java
===================================================================
---
activemq-optional/src/main/java/org/apache/activemq/transport/http/HttpTransportSupport.java
(revision 1051720)
+++
activemq-optional/src/main/java/org/apache/activemq/transport/http/HttpTransportSupport.java
(working copy)
@@ -16,6 +16,8 @@
*/
package org.apache.activemq.transport.http;
+import java.net.SocketAddress;
+import java.net.InetSocketAddress;
import java.net.URI;
import org.apache.activemq.transport.TransportThreadSupport;
@@ -47,6 +49,10 @@
return remoteUrl.toString();
}
+ public SocketAddress getRemoteSocketAddress() {
+ return new InetSocketAddress(remoteUrl.getHost(),
remoteUrl.getPort());
+ }
+
public URI getRemoteUrl() {
return remoteUrl;
}
Index:
activemq-optional/src/main/java/org/apache/activemq/transport/http/BlockingQueueTransport.java
===================================================================
---
activemq-optional/src/main/java/org/apache/activemq/transport/http/BlockingQueueTransport.java
(revision 1051720)
+++
activemq-optional/src/main/java/org/apache/activemq/transport/http/BlockingQueueTransport.java
(working copy)
@@ -24,6 +24,8 @@
import org.apache.activemq.transport.TransportSupport;
import org.apache.activemq.util.ServiceStopper;
+import java.net.SocketAddress;
+
/**
* A server side HTTP based TransportChannel which processes incoming
packets
* and adds outgoing packets onto a {...@link Queue} so that they can be
dispatched
@@ -60,6 +62,10 @@
return "blockingQueue_" + queue.hashCode();
}
+ public SocketAddress getRemoteSocketAddress() {
+ return null;
+ }
+
protected void doStart() throws Exception {
}
@@ -69,4 +75,4 @@
public int getReceiveCounter() {
return 0;
}
-}
\ No newline at end of file
+}
Index:
activemq-optional/src/main/java/org/apache/activemq/transport/ws/StompSocket.java
===================================================================
---
activemq-optional/src/main/java/org/apache/activemq/transport/ws/StompSocket.java
(revision 1051720)
+++
activemq-optional/src/main/java/org/apache/activemq/transport/ws/StompSocket.java
(working copy)
@@ -18,6 +18,7 @@
import java.io.IOException;
import java.security.cert.X509Certificate;
+import java.net.SocketAddress;
import org.apache.activemq.command.Command;
import org.apache.activemq.transport.TransportSupport;
@@ -72,6 +73,19 @@
return "StompSocket_" + this.hashCode();
}
+ public SocketAddress getRemoteSocketAddress() {
+ /*
+ * It is possible to return a SocketAddress object depending on
the
+ * Outbound object. However, it would require casting to known
+ * implementations of Outbound such as WebSocketConnection that
+ * provides a handle() method which returns an object of
+ * org.eclipse.jetty.io.Connection. The Connection object would
+ * further need to be cast to known implementations that can
provide
+ * SocketAddress details.
+ */
+ return null;
+ }
+
public void oneway(Object command) throws IOException {
try {
protocolConverter.onActiveMQCommand((Command)command);
Index:
activemq-core/src/main/java/org/apache/activemq/transport/TransportFilter.java
===================================================================
---
activemq-core/src/main/java/org/apache/activemq/transport/TransportFilter.java
(revision 1051720)
+++
activemq-core/src/main/java/org/apache/activemq/transport/TransportFilter.java
(working copy)
@@ -17,6 +17,7 @@
package org.apache.activemq.transport;
import java.io.IOException;
+import java.net.SocketAddress;
import java.net.URI;
/**
@@ -120,6 +121,10 @@
return next.getRemoteAddress();
}
+ public SocketAddress getRemoteSocketAddress() {
+ return next.getRemoteSocketAddress();
+ }
+
/**
* @return
* @see org.apache.activemq.transport.Transport#isFaultTolerant()
Index:
activemq-core/src/main/java/org/apache/activemq/transport/udp/UdpTransport.java
===================================================================
---
activemq-core/src/main/java/org/apache/activemq/transport/udp/UdpTransport.java
(revision 1051720)
+++
activemq-core/src/main/java/org/apache/activemq/transport/udp/UdpTransport.java
(working copy)
@@ -464,6 +464,13 @@
return null;
}
+ public SocketAddress getRemoteSocketAddress() {
+ if (targetAddress != null) {
+ return targetAddress;
+ }
+ return null;
+ }
+
public int getReceiveCounter() {
if (commandChannel == null) {
return 0;
Index:
activemq-core/src/main/java/org/apache/activemq/transport/vm/VMTransport.java
===================================================================
---
activemq-core/src/main/java/org/apache/activemq/transport/vm/VMTransport.java
(revision 1051720)
+++
activemq-core/src/main/java/org/apache/activemq/transport/vm/VMTransport.java
(working copy)
@@ -18,6 +18,7 @@
import java.io.IOException;
import java.io.InterruptedIOException;
+import java.net.SocketAddress;
import java.net.URI;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -298,6 +299,10 @@
return null;
}
+ public SocketAddress getRemoteSocketAddress() {
+ return null;
+ }
+
/**
* @return the async
*/
Index:
activemq-core/src/main/java/org/apache/activemq/transport/tcp/TcpTransport.java
===================================================================
---
activemq-core/src/main/java/org/apache/activemq/transport/tcp/TcpTransport.java
(revision 1051720)
+++
activemq-core/src/main/java/org/apache/activemq/transport/tcp/TcpTransport.java
(working copy)
@@ -23,6 +23,7 @@
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
+import java.net.SocketAddress;
import java.net.SocketException;
import java.net.SocketTimeoutException;
import java.net.URI;
@@ -603,6 +604,13 @@
}
return null;
}
+
+ public SocketAddress getRemoteSocketAddress() {
+ if (socket != null) {
+ return socket.getRemoteSocketAddress();
+ }
+ return null;
+ }
@Override
public <T> T narrow(Class<T> target) {
Index:
activemq-core/src/main/java/org/apache/activemq/transport/mock/MockTransport.java
===================================================================
---
activemq-core/src/main/java/org/apache/activemq/transport/mock/MockTransport.java
(revision 1051720)
+++
activemq-core/src/main/java/org/apache/activemq/transport/mock/MockTransport.java
(working copy)
@@ -17,6 +17,7 @@
package org.apache.activemq.transport.mock;
import java.io.IOException;
+import java.net.SocketAddress;
import java.net.URI;
import org.apache.activemq.transport.DefaultTransportListener;
import org.apache.activemq.transport.FutureResponse;
@@ -135,6 +136,10 @@
return getNext().getRemoteAddress();
}
+ public SocketAddress getRemoteSocketAddress() {
+ return getNext().getRemoteSocketAddress();
+ }
+
/**
* @see org.apache.activemq.transport.Transport#isFaultTolerant()
*/
Index:
activemq-core/src/main/java/org/apache/activemq/transport/fanout/FanoutTransport.java
===================================================================
---
activemq-core/src/main/java/org/apache/activemq/transport/fanout/FanoutTransport.java
(revision 1051720)
+++
activemq-core/src/main/java/org/apache/activemq/transport/fanout/FanoutTransport.java
(working copy)
@@ -18,6 +18,7 @@
import java.io.IOException;
import java.io.InterruptedIOException;
+import java.net.SocketAddress;
import java.net.URI;
import java.util.ArrayList;
import java.util.Iterator;
@@ -576,6 +577,15 @@
return null;
}
+ public SocketAddress getRemoteSocketAddress() {
+ if (primary != null) {
+ if (primary.transport != null) {
+ return primary.transport.getRemoteSocketAddress();
+ }
+ }
+ return null;
+ }
+
protected void transportListenerOnCommand(Command command) {
if (transportListener != null) {
transportListener.onCommand(command);
Index:
activemq-core/src/main/java/org/apache/activemq/transport/failover/FailoverTransport.java
===================================================================
---
activemq-core/src/main/java/org/apache/activemq/transport/failover/FailoverTransport.java
(revision 1051720)
+++
activemq-core/src/main/java/org/apache/activemq/transport/failover/FailoverTransport.java
(working copy)
@@ -24,6 +24,7 @@
import java.io.InputStreamReader;
import java.io.InterruptedIOException;
import java.net.InetAddress;
+import java.net.SocketAddress;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
@@ -752,6 +753,14 @@
return null;
}
+ public SocketAddress getRemoteSocketAddress() {
+ Transport transport = connectedTransport.get();
+ if (transport != null) {
+ return transport.getRemoteSocketAddress();
+ }
+ return null;
+ }
+
public boolean isFaultTolerant() {
return true;
}
Index:
activemq-core/src/main/java/org/apache/activemq/transport/Transport.java
===================================================================
---
activemq-core/src/main/java/org/apache/activemq/transport/Transport.java
(revision 1051720)
+++
activemq-core/src/main/java/org/apache/activemq/transport/Transport.java
(working copy)
@@ -18,6 +18,7 @@
import java.io.IOException;
import java.net.URI;
+import java.net.SocketAddress;
import org.apache.activemq.Service;
/**
@@ -130,6 +131,11 @@
String getRemoteAddress();
/**
+ * @return the remote SocketAddress for this connection
+ */
+ SocketAddress getRemoteSocketAddress();
+
+ /**
* Indicates if the transport can handle faults
*
* @return true if fault tolerant
--
http://www.fastmail.fm - Access your email from home and the web