Author: trustin
Date: Mon Jul 16 01:39:18 2007
New Revision: 556552
URL: http://svn.apache.org/viewvc?view=rev&rev=556552
Log:
Resolved issue: DIRMINA-385 (SSLFilter starts writing to session before filter
chain is complete)
* Added autoStart constructor parameter for users who don't want immediate
initiation of SSL handshake process
Modified:
mina/trunk/filter-ssl/src/main/java/org/apache/mina/filter/SSLFilter.java
Modified:
mina/trunk/filter-ssl/src/main/java/org/apache/mina/filter/SSLFilter.java
URL:
http://svn.apache.org/viewvc/mina/trunk/filter-ssl/src/main/java/org/apache/mina/filter/SSLFilter.java?view=diff&rev=556552&r1=556551&r2=556552
==============================================================================
--- mina/trunk/filter-ssl/src/main/java/org/apache/mina/filter/SSLFilter.java
(original)
+++ mina/trunk/filter-ssl/src/main/java/org/apache/mina/filter/SSLFilter.java
Mon Jul 16 01:39:18 2007
@@ -46,7 +46,9 @@
* Adding this filter triggers SSL handshake procedure immediately by sending
* a SSL 'hello' message, so you don't need to call
* [EMAIL PROTECTED] #startSSL(IoSession)} manually unless you are
implementing StartTLS
- * (see below).
+ * (see below). If you don't want the handshake procedure to start
+ * immediately, please specify [EMAIL PROTECTED] true} as [EMAIL PROTECTED]
autoStart} parameter in
+ * the constructor.
* <p>
* This filter uses an [EMAIL PROTECTED] SSLEngine} which was introduced in
Java 5, so
* Java version 5 or above is mandatory to use this filter. And please note
that
@@ -152,7 +154,9 @@
+ ".SSLHandler";
// SSL Context
- private SSLContext sslContext;
+ private final SSLContext sslContext;
+
+ private final boolean autoStart;
private boolean client;
@@ -168,11 +172,19 @@
* Creates a new SSL filter using the specified [EMAIL PROTECTED]
SSLContext}.
*/
public SSLFilter(SSLContext sslContext) {
+ this(sslContext, true);
+ }
+
+ /**
+ * Creates a new SSL filter using the specified [EMAIL PROTECTED]
SSLContext}.
+ */
+ public SSLFilter(SSLContext sslContext, boolean autoStart) {
if (sslContext == null) {
throw new NullPointerException("sslContext");
}
this.sslContext = sslContext;
+ this.autoStart = autoStart;
}
/**
@@ -356,11 +368,9 @@
@Override
public void onPostAdd(IoFilterChain parent, String name,
NextFilter nextFilter) throws SSLException {
- SSLHandler handler = getSSLSessionHandler(parent.getSession());
- synchronized (handler) {
- handler.handshake(nextFilter);
+ if (autoStart) {
+ initiateHandshake(nextFilter, parent.getSession());
}
- handler.flushPostHandshakeEvents();
}
@Override
@@ -571,6 +581,15 @@
}
}
+ private void initiateHandshake(NextFilter nextFilter, IoSession session)
+ throws SSLException {
+ SSLHandler handler = getSSLSessionHandler(session);
+ synchronized (handler) {
+ handler.handshake(nextFilter);
+ }
+ handler.flushPostHandshakeEvents();
+ }
+
private WriteFuture initiateClosure(NextFilter nextFilter, IoSession
session)
throws SSLException {
SSLHandler handler = getSSLSessionHandler(session);