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

Reply via email to