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);


Reply via email to