You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by el...@apache.org on 2012/05/03 16:45:07 UTC

svn commit: r1333483 - in /mina/trunk: core/src/main/java/org/apache/mina/api/ core/src/main/java/org/apache/mina/service/ core/src/main/java/org/apache/mina/transport/tcp/ examples/src/main/java/org/apache/mina/examples/http/

Author: elecharny
Date: Thu May  3 14:45:07 2012
New Revision: 1333483

URL: http://svn.apache.org/viewvc?rev=1333483&view=rev
Log:
Refactored the code to move the SSL handling to the Session configuration instead of the service

Modified:
    mina/trunk/core/src/main/java/org/apache/mina/api/IoService.java
    mina/trunk/core/src/main/java/org/apache/mina/api/IoSessionConfig.java
    mina/trunk/core/src/main/java/org/apache/mina/service/AbstractIoService.java
    mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/AbstractTcpClient.java
    mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/AbstractTcpServer.java
    mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/DefaultSocketSessionConfig.java
    mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/NioSelectorProcessor.java
    mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/ProxySocketSessionConfig.java
    mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/SocketSessionConfig.java
    mina/trunk/examples/src/main/java/org/apache/mina/examples/http/HttpsTest.java

Modified: mina/trunk/core/src/main/java/org/apache/mina/api/IoService.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/api/IoService.java?rev=1333483&r1=1333482&r2=1333483&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/api/IoService.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/api/IoService.java Thu May  3 14:45:07 2012
@@ -21,8 +21,6 @@ package org.apache.mina.api;
 
 import java.util.Map;
 
-import javax.net.ssl.SSLException;
-
 import org.apache.mina.service.IoHandler;
 
 /**
@@ -90,18 +88,4 @@ public interface IoService {
      * @return The default configuration for this {@link IoService}
      */
     IoSessionConfig getSessionConfig();
-
-    /**
-     * Tells if the service provide some encryption (SSL/TLS)
-     * 
-     * @return <code>true</code> if the service is secured
-     */
-    boolean isSecured();
-
-    /**
-     * Initialize the service in secured mode for the given session.
-     * 
-     * @param session The {@link IoSession} to secure
-     */
-    void initSecured(IoSession session) throws SSLException;
 }

Modified: mina/trunk/core/src/main/java/org/apache/mina/api/IoSessionConfig.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/api/IoSessionConfig.java?rev=1333483&r1=1333482&r2=1333483&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/api/IoSessionConfig.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/api/IoSessionConfig.java Thu May  3 14:45:07 2012
@@ -41,5 +41,4 @@ public interface IoSessionConfig {
      * @param ildeTimeInMilli the timeout in milliseconds (<code>-1</code> for no idle detection on this status)
      */
     void setIdleTimeInMillis(IdleStatus status, long ildeTimeInMilli);
-
 }

Modified: mina/trunk/core/src/main/java/org/apache/mina/service/AbstractIoService.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/service/AbstractIoService.java?rev=1333483&r1=1333482&r2=1333483&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/service/AbstractIoService.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/service/AbstractIoService.java Thu May  3 14:45:07 2012
@@ -24,8 +24,6 @@ import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CopyOnWriteArrayList;
 
-import javax.net.ssl.SSLException;
-
 import org.apache.mina.api.IoFilter;
 import org.apache.mina.api.IoService;
 import org.apache.mina.api.IoServiceListener;
@@ -45,9 +43,6 @@ public abstract class AbstractIoService 
     /** The service state */
     private ServiceState state;
 
-    /** The service mode : secured or not */
-    protected ServiceMode mode;
-
     private final Map<Long, IoSession> managedSessions = new ConcurrentHashMap<Long, IoSession>();
 
     /**
@@ -79,21 +74,10 @@ public abstract class AbstractIoService 
     }
 
     /**
-     * The Service secured mode
-     */
-    protected enum ServiceMode {
-        /** SSL/TLS activated */
-        SECURED,
-        /** SSL/TLS not activated */
-        NOT_SECURED
-    }
-
-    /**
      * Create an AbstractIoService
      */
     protected AbstractIoService() {
         state = ServiceState.NONE;
-        mode = ServiceMode.NOT_SECURED;
     }
 
     @Override
@@ -286,28 +270,4 @@ public abstract class AbstractIoService 
     public void setFilters(IoFilter... filters) {
         this.filters = filters;
     }
-
-    /**
-     * Tells if the service provide some encryption (SSL/TLS)
-     * @return <code>true</code> if the service is secured
-     */
-    public boolean isSecured() {
-        return mode == ServiceMode.SECURED;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public abstract void initSecured(IoSession session) throws SSLException;
-
-    /**
-     * {@inheritDoc}
-     */
-    public void setSecured(boolean secured) {
-        if (secured) {
-            mode = ServiceMode.SECURED;
-        } else {
-            mode = ServiceMode.NOT_SECURED;
-        }
-    }
 }
\ No newline at end of file

Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/AbstractTcpClient.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/AbstractTcpClient.java?rev=1333483&r1=1333482&r2=1333483&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/AbstractTcpClient.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/AbstractTcpClient.java Thu May  3 14:45:07 2012
@@ -19,10 +19,6 @@
  */
 package org.apache.mina.transport.tcp;
 
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLException;
-
-import org.apache.mina.api.IoSession;
 import org.apache.mina.service.client.AbstractIoClient;
 
 /**
@@ -31,42 +27,10 @@ import org.apache.mina.service.client.Ab
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>
  */
 public abstract class AbstractTcpClient extends AbstractIoClient {
-    /** The SSLContext instance */
-    private SSLContext sslContext;
-
     /**
      * Create an new AbsractTcpClient instance
      */
     protected AbstractTcpClient() {
         super();
     }
-
-    /**
-     * Inject a {@link SSLContex} valid for the service. This {@link SSLContex} will be used
-     * by the SSLEngine to handle secured connections.<br/>
-     * The {@link SSLContex} must have been created and initialized before being injected in
-     * the service.<br/>
-     * By setting a {@link SSLContext}, the service switch to secured.
-     * @param sslContext The configured {@link SSLContex}.
-     */
-    public void setSslContext(SSLContext sslContext) {
-        this.sslContext = sslContext;
-        mode = ServiceMode.SECURED;
-    }
-
-    /**
-     * @return The {@link SSLContext} instance stored in the service.
-     */
-    public SSLContext getSslContext() {
-        return sslContext;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void initSecured(IoSession session) throws SSLException {
-        if (mode == ServiceMode.SECURED) {
-            session.initSecure(sslContext);
-        }
-    }
 }

Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/AbstractTcpServer.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/AbstractTcpServer.java?rev=1333483&r1=1333482&r2=1333483&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/AbstractTcpServer.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/AbstractTcpServer.java Thu May  3 14:45:07 2012
@@ -19,10 +19,6 @@
  */
 package org.apache.mina.transport.tcp;
 
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLException;
-
-import org.apache.mina.api.IoSession;
 import org.apache.mina.service.server.AbstractIoServer;
 
 /**
@@ -31,9 +27,6 @@ import org.apache.mina.service.server.Ab
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>
  */
 public abstract class AbstractTcpServer extends AbstractIoServer {
-    /** The SSLContext instance */
-    private SSLContext sslContext;
-
     /**
      * Create an new AbsractTcpServer instance
      */
@@ -52,33 +45,4 @@ public abstract class AbstractTcpServer 
      * @return
      */
     public abstract boolean isReuseAddress();
-
-    /**
-     * Inject a {@link SSLContex} valid for the service. This {@link SSLContex} will be used
-     * by the SSLEngine to handle secured connections.<br/>
-     * The {@link SSLContex} must have been created and initialized before being injected in
-     * the service.<br/>
-     * By setting a {@link SSLContext}, the service switch to secured.
-     * @param sslContext The configured {@link SSLContex}.
-     */
-    public void setSslContext(SSLContext sslContext) {
-        this.sslContext = sslContext;
-        mode = ServiceMode.SECURED;
-    }
-
-    /**
-     * @return The {@link SSLContext} instance stored in the service.
-     */
-    public SSLContext getSslContext() {
-        return sslContext;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public void initSecured(IoSession session) throws SSLException {
-        if (mode == ServiceMode.SECURED) {
-            session.initSecure(sslContext);
-        }
-    }
 }
\ No newline at end of file

Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/DefaultSocketSessionConfig.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/DefaultSocketSessionConfig.java?rev=1333483&r1=1333482&r2=1333483&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/DefaultSocketSessionConfig.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/DefaultSocketSessionConfig.java Thu May  3 14:45:07 2012
@@ -18,6 +18,8 @@
  */
 package org.apache.mina.transport.tcp;
 
+import javax.net.ssl.SSLContext;
+
 import org.apache.mina.session.AbstractIoSessionConfig;
 
 /**
@@ -28,11 +30,12 @@ import org.apache.mina.session.AbstractI
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>
  */
 public class DefaultSocketSessionConfig extends AbstractIoSessionConfig implements SocketSessionConfig {
+    /** The SSLContext instance */
+    private SSLContext sslContext;
 
     //=====================
     // buffers
     //=====================
-
     private Integer receiveBufferSize = null;
 
     /**
@@ -181,4 +184,31 @@ public class DefaultSocketSessionConfig 
     public void setSoLinger(int soLinger) {
         this.soLinger = soLinger;
     }
+
+    /**
+     * Inject a {@link SSLContex} valid for the session. This {@link SSLContex} will be used
+     * by the SSLEngine to handle secured connections.<br/>
+     * The {@link SSLContex} must have been created and initialized before being injected in
+     * the configuration.<br/>
+     * By setting a {@link SSLContext}, the session switch to secured.
+     * @param sslContext The configured {@link SSLContex}.
+     */
+    public void setSslContext(SSLContext sslContext) {
+        this.sslContext = sslContext;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public SSLContext getSslContext() {
+        return sslContext;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public boolean isSecured() {
+        return sslContext != null;
+    }
 }

Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/NioSelectorProcessor.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/NioSelectorProcessor.java?rev=1333483&r1=1333482&r2=1333483&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/NioSelectorProcessor.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/NioSelectorProcessor.java Thu May  3 14:45:07 2012
@@ -182,7 +182,7 @@ public class NioSelectorProcessor implem
     public void createSession(IoService service, Object clientSocket) throws SSLException {
         LOGGER.debug("create session");
         final SocketChannel socketChannel = (SocketChannel) clientSocket;
-        final SocketSessionConfig defaultConfig = (SocketSessionConfig) service.getSessionConfig();
+        final SocketSessionConfig config = (SocketSessionConfig) service.getSessionConfig();
         final NioTcpSession session = new NioTcpSession(service, socketChannel, strategy.getSelectorForNewSession(this));
 
         try {
@@ -192,63 +192,62 @@ public class NioSelectorProcessor implem
             throw new RuntimeIoException("cannot configure socket as non-blocking", e);
         }
         // apply idle configuration
-        session.getConfig().setIdleTimeInMillis(IdleStatus.READ_IDLE,
-                defaultConfig.getIdleTimeInMillis(IdleStatus.READ_IDLE));
+        session.getConfig().setIdleTimeInMillis(IdleStatus.READ_IDLE, config.getIdleTimeInMillis(IdleStatus.READ_IDLE));
         session.getConfig().setIdleTimeInMillis(IdleStatus.WRITE_IDLE,
-                defaultConfig.getIdleTimeInMillis(IdleStatus.WRITE_IDLE));
+                config.getIdleTimeInMillis(IdleStatus.WRITE_IDLE));
 
         // apply the default service socket configuration
-        Boolean keepAlive = defaultConfig.isKeepAlive();
+        Boolean keepAlive = config.isKeepAlive();
 
         if (keepAlive != null) {
             session.getConfig().setKeepAlive(keepAlive);
         }
 
-        Boolean oobInline = defaultConfig.isOobInline();
+        Boolean oobInline = config.isOobInline();
 
         if (oobInline != null) {
             session.getConfig().setOobInline(oobInline);
         }
 
-        Boolean reuseAddress = defaultConfig.isReuseAddress();
+        Boolean reuseAddress = config.isReuseAddress();
 
         if (reuseAddress != null) {
             session.getConfig().setReuseAddress(reuseAddress);
         }
 
-        Boolean tcpNoDelay = defaultConfig.isTcpNoDelay();
+        Boolean tcpNoDelay = config.isTcpNoDelay();
 
         if (tcpNoDelay != null) {
             session.getConfig().setTcpNoDelay(tcpNoDelay);
         }
 
-        Integer receiveBufferSize = defaultConfig.getReceiveBufferSize();
+        Integer receiveBufferSize = config.getReceiveBufferSize();
 
         if (receiveBufferSize != null) {
             session.getConfig().setReceiveBufferSize(receiveBufferSize);
         }
 
-        Integer sendBufferSize = defaultConfig.getSendBufferSize();
+        Integer sendBufferSize = config.getSendBufferSize();
 
         if (sendBufferSize != null) {
             session.getConfig().setSendBufferSize(sendBufferSize);
         }
 
-        Integer trafficClass = defaultConfig.getTrafficClass();
+        Integer trafficClass = config.getTrafficClass();
 
         if (trafficClass != null) {
             session.getConfig().setTrafficClass(trafficClass);
         }
 
-        Integer soLinger = defaultConfig.getSoLinger();
+        Integer soLinger = config.getSoLinger();
 
         if (soLinger != null) {
             session.getConfig().setSoLinger(soLinger);
         }
 
         // Set the secured flag if the service is to be used over SSL/TLS
-        if (service.isSecured()) {
-            service.initSecured(session);
+        if (config.isSecured()) {
+            session.initSecure(config.getSslContext());
         }
 
         // event session created

Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/ProxySocketSessionConfig.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/ProxySocketSessionConfig.java?rev=1333483&r1=1333482&r2=1333483&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/ProxySocketSessionConfig.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/ProxySocketSessionConfig.java Thu May  3 14:45:07 2012
@@ -21,6 +21,8 @@ package org.apache.mina.transport.tcp;
 import java.net.Socket;
 import java.net.SocketException;
 
+import javax.net.ssl.SSLContext;
+
 import org.apache.mina.api.ConfigurationException;
 import org.apache.mina.api.IdleStatus;
 import org.slf4j.Logger;
@@ -277,4 +279,20 @@ public class ProxySocketSessionConfig im
         }
     }
 
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public boolean isSecured() {
+        return false;
+    }
+
+    @Override
+    public SSLContext getSslContext() {
+        return null;
+    }
+
+    @Override
+    public void setSslContext(SSLContext sslContext) {
+    }
 }

Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/SocketSessionConfig.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/SocketSessionConfig.java?rev=1333483&r1=1333482&r2=1333483&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/SocketSessionConfig.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/SocketSessionConfig.java Thu May  3 14:45:07 2012
@@ -20,6 +20,8 @@ package org.apache.mina.transport.tcp;
 
 import java.net.Socket;
 
+import javax.net.ssl.SSLContext;
+
 import org.apache.mina.api.IoSessionConfig;
 
 /**
@@ -28,7 +30,6 @@ import org.apache.mina.api.IoSessionConf
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>
  */
 public interface SocketSessionConfig extends IoSessionConfig {
-
     /**
      * @see Socket#getTcpNoDelay()
      */
@@ -126,4 +127,20 @@ public interface SocketSessionConfig ext
      */
     void setSoLinger(int soLinger);
 
+    /**
+     * Tells if the session provides some encryption (SSL/TLS)
+     * 
+     * @return <code>true</code> if the session is secured
+     */
+    boolean isSecured();
+
+    /**
+     * @return The {@link SSLContext} instance stored in the configuration.
+     */
+    SSLContext getSslContext();
+
+    /**
+     * @return The {@link SSLContext} instance stored in the configuration.
+     */
+    void setSslContext(SSLContext sslContext);
 }

Modified: mina/trunk/examples/src/main/java/org/apache/mina/examples/http/HttpsTest.java
URL: http://svn.apache.org/viewvc/mina/trunk/examples/src/main/java/org/apache/mina/examples/http/HttpsTest.java?rev=1333483&r1=1333482&r2=1333483&view=diff
==============================================================================
--- mina/trunk/examples/src/main/java/org/apache/mina/examples/http/HttpsTest.java (original)
+++ mina/trunk/examples/src/main/java/org/apache/mina/examples/http/HttpsTest.java Thu May  3 14:45:07 2012
@@ -55,14 +55,14 @@ public class HttpsTest {
                 NioSelectorProcessor.class));
         NioTcpServer acceptor = new NioTcpServer(strategy);
 
-        // Make it use https, injecting a default SSLContext instance
-        acceptor.setSslContext(BogusSslContextFactory.getInstance(true));
-
         acceptor.setFilters(new LoggingFilter("INCOMING"), new HttpServerCodec(), new LoggingFilter("DECODED"),
                 new DummyHttpSever());
 
         acceptor.getSessionConfig().setTcpNoDelay(true);
 
+        // Make it use https, injecting a default SSLContext instance
+        acceptor.getSessionConfig().setSslContext(BogusSslContextFactory.getInstance(true));
+
         acceptor.bind(new InetSocketAddress(8080));
 
         // run for 20 seconds