[jboss-cvs] JBoss Messaging SVN: r3312 - in projects/jbm-mina: src/main/org/jboss/messaging/remoting and 2 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Nov 12 08:50:16 EST 2007


Author: jmesnil
Date: 2007-11-12 08:50:16 -0500 (Mon, 12 Nov 2007)
New Revision: 3312

Modified:
   projects/jbm-mina/.classpath
   projects/jbm-mina/src/main/org/jboss/messaging/remoting/RemoteDispatcher.java
   projects/jbm-mina/src/main/org/jboss/messaging/remoting/internal/RemoteDispatcherImpl.java
   projects/jbm-mina/tests/src/org/jboss/messaging/remoting/TestSupport.java
Log:
* added support for SSL (using mina-example's BogusSslContextFactory)

Modified: projects/jbm-mina/.classpath
===================================================================
--- projects/jbm-mina/.classpath	2007-11-12 09:25:50 UTC (rev 3311)
+++ projects/jbm-mina/.classpath	2007-11-12 13:50:16 UTC (rev 3312)
@@ -13,5 +13,6 @@
 	<classpathentry combineaccessrules="false" kind="src" path="/asyncweb-core"/>
 	<classpathentry combineaccessrules="false" kind="src" path="/mina-filter-codec-http"/>
 	<classpathentry kind="lib" path="/jboss-messaging/thirdparty/jbossas/core-libs/lib/jboss-common.jar"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/mina-example"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>

Modified: projects/jbm-mina/src/main/org/jboss/messaging/remoting/RemoteDispatcher.java
===================================================================
--- projects/jbm-mina/src/main/org/jboss/messaging/remoting/RemoteDispatcher.java	2007-11-12 09:25:50 UTC (rev 3311)
+++ projects/jbm-mina/src/main/org/jboss/messaging/remoting/RemoteDispatcher.java	2007-11-12 13:50:16 UTC (rev 3312)
@@ -13,8 +13,10 @@
 
    public void connect(int port, TransportType transport) throws Exception;
 
-   public void disconnect() throws Exception;
+   public void connect(int port, TransportType transport, boolean useSSL) throws Exception;
 
+   public boolean disconnect() throws Exception;
+
    public void register(PacketHandler handler);
 
    public void unregister(String handlerID);

Modified: projects/jbm-mina/src/main/org/jboss/messaging/remoting/internal/RemoteDispatcherImpl.java
===================================================================
--- projects/jbm-mina/src/main/org/jboss/messaging/remoting/internal/RemoteDispatcherImpl.java	2007-11-12 09:25:50 UTC (rev 3311)
+++ projects/jbm-mina/src/main/org/jboss/messaging/remoting/internal/RemoteDispatcherImpl.java	2007-11-12 13:50:16 UTC (rev 3312)
@@ -12,8 +12,13 @@
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
 
+import javax.net.ssl.SSLContext;
+
+import org.apache.mina.common.CloseFuture;
 import org.apache.mina.common.ConnectFuture;
+import org.apache.mina.common.DefaultIoFilterChainBuilder;
 import org.apache.mina.common.IoSession;
+import org.apache.mina.example.echoserver.ssl.BogusSslContextFactory;
 import org.apache.mina.filter.codec.ProtocolCodecFilter;
 import org.apache.mina.filter.codec.http.HttpProtocolCodecFactory;
 import org.apache.mina.filter.logging.LoggingFilter;
@@ -21,6 +26,7 @@
 import org.apache.mina.filter.reqres.Request;
 import org.apache.mina.filter.reqres.RequestResponseFilter;
 import org.apache.mina.filter.reqres.Response;
+import org.apache.mina.filter.ssl.SslFilter;
 import org.apache.mina.transport.socket.nio.NioSocketConnector;
 import org.jboss.messaging.remoting.PacketHandler;
 import org.jboss.messaging.remoting.RemoteDispatcher;
@@ -33,6 +39,7 @@
 {
 
    private IoSession session;
+   private SslFilter sslFilter;
 
    public RemoteDispatcherImpl()
    {
@@ -40,10 +47,19 @@
 
    public void connect(int port, TransportType transport) throws Exception
    {
+      connect(port, transport, false);
+   }
+
+   public void connect(int port, TransportType transport, boolean useSSL)
+         throws Exception
+   {
       NioSocketConnector connector = new NioSocketConnector();
 
       connector.setConnectTimeout(CONNECTION_TIMEOUT);
 
+      if (useSSL)
+         addSSLSupport(connector.getFilterChain());
+
       MdcInjectionFilter mdcInjectionFilter = new MdcInjectionFilter();
       connector.getFilterChain().addLast("mdc", mdcInjectionFilter);
 
@@ -60,7 +76,8 @@
          connector.getFilterChain().addLast("http_codec",
                new ProtocolCodecFilter(new HttpProtocolCodecFactory(url)));
          connector.getFilterChain().addLast("http_logger", new LoggingFilter());
-         connector.getFilterChain().addLast("http_filter", new HTTPFilter(false));
+         connector.getFilterChain().addLast("http_filter",
+               new HTTPFilter(false));
       }
       ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
       RequestResponseFilter filter = new RequestResponseFilter(
@@ -80,11 +97,27 @@
       this.session = future.getSession();
    }
 
-   public void disconnect() throws Exception
+   private void addSSLSupport(DefaultIoFilterChainBuilder chain)
+         throws Exception
    {
+      this.sslFilter = new SslFilter(BogusSslContextFactory.getInstance(false));
+      sslFilter.setUseClientMode(true);
+      chain.addLast("sslFilter", sslFilter);
+   }
+
+   public boolean disconnect() throws Exception
+   {
       assert session != null;
 
-      session.close().await();
+      if (sslFilter != null)
+      {
+         sslFilter.stopSsl(session).awaitUninterruptibly();
+         // FIXME: w/o the delay, an exception is thrown:
+         // "Inbound closed before receiving peer's close_notify"
+         Thread.sleep(500);
+      }
+      CloseFuture closeFuture = session.close().awaitUninterruptibly();
+      return closeFuture.isClosed();
    }
 
    public void register(PacketHandler handler)

Modified: projects/jbm-mina/tests/src/org/jboss/messaging/remoting/TestSupport.java
===================================================================
--- projects/jbm-mina/tests/src/org/jboss/messaging/remoting/TestSupport.java	2007-11-12 09:25:50 UTC (rev 3311)
+++ projects/jbm-mina/tests/src/org/jboss/messaging/remoting/TestSupport.java	2007-11-12 13:50:16 UTC (rev 3312)
@@ -3,12 +3,14 @@
 import static org.jboss.messaging.remoting.internal.TransportType.HTTP;
 import static org.jboss.messaging.remoting.internal.TransportType.TCP;
 
-import java.io.IOException;
 import java.net.InetSocketAddress;
 
+import org.apache.mina.common.DefaultIoFilterChainBuilder;
+import org.apache.mina.example.echoserver.ssl.BogusSslContextFactory;
 import org.apache.mina.filter.codec.ProtocolCodecFilter;
 import org.apache.mina.filter.logging.LoggingFilter;
 import org.apache.mina.filter.logging.MdcInjectionFilter;
+import org.apache.mina.filter.ssl.SslFilter;
 import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
 import org.jboss.messaging.remoting.internal.TransportType;
 import org.jboss.messaging.remoting.transport.http.HTTPFilter;
@@ -23,10 +25,11 @@
    // Constants -----------------------------------------------------
 
    /**
-    * Configurable by system property <code>transport.type</code>, default is TCP
+    * Configurable by system property <code>transport.type</code>, default is
+    * TCP
     */
    public final static TransportType TRANSPORT;
-   
+
    // Attributes ----------------------------------------------------
 
    NioSocketAcceptor serverAcceptor;
@@ -39,9 +42,10 @@
 
    static
    {
-      String transportType = System.getProperty("transport.type", TCP.toString());
+      String transportType = System.getProperty("transport.type", TCP
+            .toString());
       TRANSPORT = TransportType.valueOf(transportType);
-      System.out.println("Test using transport type: " + TRANSPORT);
+      info("Default transport is " + TRANSPORT);
    }
 
    static String reverse(String text)
@@ -55,18 +59,28 @@
       return buf.toString();
    }
 
-   
    // Constructors --------------------------------------------------
 
    // Public --------------------------------------------------------
 
-   void startServer(int port, TransportType transport) throws IOException
+   void startServer(int port, TransportType transport) throws Exception
    {
+      startServer(port, transport, false);
+   }
+
+   void startServer(int port, TransportType transport, boolean useSSL)
+         throws Exception
+   {
       serverAcceptor = new NioSocketAcceptor();
       serverHandler = new TestServerHandler();
 
       MdcInjectionFilter mdcInjectionFilter = new MdcInjectionFilter();
       serverAcceptor.getFilterChain().addLast("mdc", mdcInjectionFilter);
+
+      if (useSSL)
+         addSSLSupport(serverAcceptor.getFilterChain());
+
+      info("using " + transport);
       if (transport == TCP)
       {
          serverAcceptor.getFilterChain().addLast("codec",
@@ -84,14 +98,29 @@
 
       // Bind
       serverAcceptor.setLocalAddress(new InetSocketAddress(port));
+      info("listening on " + port);
       serverAcceptor.setHandler(serverHandler);
       serverAcceptor.bind();
    }
 
+   private void addSSLSupport(DefaultIoFilterChainBuilder chain)
+         throws Exception
+   {
+      SslFilter sslFilter = new SslFilter(BogusSslContextFactory.getInstance(true));
+      chain.addLast("sslFilter", sslFilter);
+      info("SSL enabled");
+   }
+
    void startClient(int port, TransportType transport) throws Exception
    {
+      startClient(port, transport, false);
+   }
+
+   void startClient(int port, TransportType transport, boolean useSSL)
+         throws Exception
+   {
       clientDispatcher = RemoteDispatcherFactory.newDispatcher();
-      clientDispatcher.connect(port, transport);
+      clientDispatcher.connect(port, transport, useSSL);
    }
 
    // Package protected ---------------------------------------------
@@ -100,5 +129,10 @@
 
    // Private -------------------------------------------------------
 
+   private static void info(String info)
+   {
+      System.out.format("### %-50s ###\n", info);
+   }
+
    // Inner classes -------------------------------------------------
 }




More information about the jboss-cvs-commits mailing list