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