You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by tr...@apache.org on 2005/06/07 08:46:51 UTC

svn commit: r188719 - in /directory/network: branches/0.7/src/java/org/apache/mina/io/filter/SSLFilter.java branches/dirmina-39/src/java/org/apache/mina/filter/SSLFilter.java trunk/src/java/org/apache/mina/filter/SSLFilter.java

Author: trustin
Date: Mon Jun  6 23:46:50 2005
New Revision: 188719

URL: http://svn.apache.org/viewcvs?rev=188719&view=rev
Log:
* Made SSLFilter to store SSLHandler as a session attribute
* Added SSLFilter.getSSLSession( IoSession ) so that users can get SSLSessions not using IoSession.getAttribute()



Modified:
    directory/network/branches/0.7/src/java/org/apache/mina/io/filter/SSLFilter.java
    directory/network/branches/dirmina-39/src/java/org/apache/mina/filter/SSLFilter.java
    directory/network/trunk/src/java/org/apache/mina/filter/SSLFilter.java

Modified: directory/network/branches/0.7/src/java/org/apache/mina/io/filter/SSLFilter.java
URL: http://svn.apache.org/viewcvs/directory/network/branches/0.7/src/java/org/apache/mina/io/filter/SSLFilter.java?rev=188719&r1=188718&r2=188719&view=diff
==============================================================================
--- directory/network/branches/0.7/src/java/org/apache/mina/io/filter/SSLFilter.java (original)
+++ directory/network/branches/0.7/src/java/org/apache/mina/io/filter/SSLFilter.java Mon Jun  6 23:46:50 2005
@@ -18,8 +18,6 @@
  */
 package org.apache.mina.io.filter;
 
-import java.util.IdentityHashMap;
-import java.util.Map;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -27,6 +25,7 @@
 import javax.net.ssl.SSLEngine;
 import javax.net.ssl.SSLException;
 import javax.net.ssl.SSLHandshakeException;
+import javax.net.ssl.SSLSession;
 
 import org.apache.mina.common.ByteBuffer;
 import org.apache.mina.io.IoFilterAdapter;
@@ -47,10 +46,12 @@
 public class SSLFilter extends IoFilterAdapter
 {
     /**
-     * Session attribute key that stores underlying {@link javax.net.ssl.SSLSession}
+     * Session attribute key that stores underlying {@link SSLSession}
      * for each session.
      */
     public static final String SSL_SESSION = SSLFilter.class.getName() + ".SSLSession";
+    
+    private static final String SSL_HANDLER = SSLFilter.class.getName() + ".SSLHandler";
 
     private static final Logger log = Logger.getLogger( SSLFilter.class.getName() );
 
@@ -69,9 +70,6 @@
     // SSL Context
     private SSLContext sslContext;
 
-    // Map used to map SSLHandler objects per session (key is IoSession)
-    private Map sslSessionHandlerMap = new IdentityHashMap();
-
     private boolean client;
     private boolean needClientAuth;
     private boolean wantClientAuth;
@@ -90,6 +88,16 @@
 
         this.sslContext = sslContext;
     }
+    
+    /**
+     * Returns the underlying {@link SSLSession} for the specified session.
+     * 
+     * @return <tt>null</tt> if no {@link SSLSession} is initialized yet.
+     */
+    public SSLSession getSSLSession( IoSession session )
+    {
+        return ( SSLSession ) session.getAttribute( SSL_SESSION );
+    }
 
     /**
      * Returns <tt>true</tt> if the engine is set to use client mode
@@ -478,12 +486,12 @@
 
     private SSLHandler createSSLSessionHandler( NextFilter nextFilter, IoSession session ) throws SSLException
     {
-        SSLHandler handler = ( SSLHandler ) sslSessionHandlerMap.get( session );
+        SSLHandler handler = getSSLSessionHandler( session );
         if( handler == null )
         {
-            synchronized( sslSessionHandlerMap )
+            synchronized( session )
             {
-                handler = ( SSLHandler ) sslSessionHandlerMap.get( session );
+                handler = getSSLSessionHandler( session );
                 if( handler == null )
                 {
                     boolean done = false;
@@ -491,7 +499,7 @@
                     {
                         handler =
                             new SSLHandler( this, sslContext, session );
-                        sslSessionHandlerMap.put( session, handler );
+                        session.setAttribute( SSL_HANDLER, handler );
                         handler.doHandshake( nextFilter );
                         done = true;
                     }
@@ -499,7 +507,7 @@
                     {
                         if( !done )
                         {
-                            sslSessionHandlerMap.remove( session );
+                            session.removeAttribute( SSL_HANDLER );
                         }
                     }
                 }
@@ -511,14 +519,11 @@
 
     private SSLHandler getSSLSessionHandler( IoSession session )
     {
-        return ( SSLHandler ) sslSessionHandlerMap.get( session );
+        return ( SSLHandler ) session.getAttribute( SSL_HANDLER );
     }
 
     private void removeSSLSessionHandler( IoSession session )
     {
-        synchronized( sslSessionHandlerMap )
-        {
-            sslSessionHandlerMap.remove( session );
-        }
+        session.removeAttribute( SSL_HANDLER );
     }
 }

Modified: directory/network/branches/dirmina-39/src/java/org/apache/mina/filter/SSLFilter.java
URL: http://svn.apache.org/viewcvs/directory/network/branches/dirmina-39/src/java/org/apache/mina/filter/SSLFilter.java?rev=188719&r1=188718&r2=188719&view=diff
==============================================================================
--- directory/network/branches/dirmina-39/src/java/org/apache/mina/filter/SSLFilter.java (original)
+++ directory/network/branches/dirmina-39/src/java/org/apache/mina/filter/SSLFilter.java Mon Jun  6 23:46:50 2005
@@ -18,8 +18,6 @@
  */
 package org.apache.mina.filter;
 
-import java.util.IdentityHashMap;
-import java.util.Map;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -27,6 +25,7 @@
 import javax.net.ssl.SSLEngine;
 import javax.net.ssl.SSLException;
 import javax.net.ssl.SSLHandshakeException;
+import javax.net.ssl.SSLSession;
 
 import org.apache.mina.common.ByteBuffer;
 import org.apache.mina.common.ByteBufferProxy;
@@ -49,19 +48,18 @@
 public class SSLFilter extends IoFilterAdapter
 {
     /**
-     * Session attribute key that stores underlying {@link javax.net.ssl.SSLSession}
+     * Session attribute key that stores underlying {@link SSLSession}
      * for each session.
      */
     public static final String SSL_SESSION = SSLFilter.class.getName() + ".SSLSession";
+    
+    private static final String SSL_HANDLER = SSLFilter.class.getName() + ".SSLHandler";
 
     private static final Logger log = Logger.getLogger( SSLFilter.class.getName() );
 
     // SSL Context
     private SSLContext sslContext;
 
-    // Map used to map SSLHandler objects per session (key is IoSession)
-    private Map sslSessionHandlerMap = new IdentityHashMap();
-
     private boolean client;
     private boolean needClientAuth;
     private boolean wantClientAuth;
@@ -80,6 +78,16 @@
 
         this.sslContext = sslContext;
     }
+    
+    /**
+     * Returns the underlying {@link SSLSession} for the specified session.
+     * 
+     * @return <tt>null</tt> if no {@link SSLSession} is initialized yet.
+     */
+    public SSLSession getSSLSession( IoSession session )
+    {
+        return ( SSLSession ) session.getAttribute( SSL_SESSION );
+    }
 
     /**
      * Returns <tt>true</tt> if the engine is set to use client mode
@@ -480,12 +488,12 @@
 
     private SSLHandler createSSLSessionHandler( NextFilter nextFilter, IoSession session ) throws SSLException
     {
-        SSLHandler handler = ( SSLHandler ) sslSessionHandlerMap.get( session );
+        SSLHandler handler = getSSLSessionHandler( session );
         if( handler == null )
         {
-            synchronized( sslSessionHandlerMap )
+            synchronized( session )
             {
-                handler = ( SSLHandler ) sslSessionHandlerMap.get( session );
+                handler = getSSLSessionHandler( session );
                 if( handler == null )
                 {
                     boolean done = false;
@@ -493,7 +501,7 @@
                     {
                         handler =
                             new SSLHandler( this, sslContext, session );
-                        sslSessionHandlerMap.put( session, handler );
+                        session.setAttribute( SSL_HANDLER, handler );
                         handler.doHandshake( nextFilter );
                         done = true;
                     }
@@ -501,7 +509,7 @@
                     {
                         if( !done )
                         {
-                            sslSessionHandlerMap.remove( session );
+                            session.removeAttribute( SSL_HANDLER );
                         }
                     }
                 }
@@ -513,15 +521,12 @@
 
     private SSLHandler getSSLSessionHandler( IoSession session )
     {
-        return ( SSLHandler ) sslSessionHandlerMap.get( session );
+        return ( SSLHandler ) session.getAttribute( SSL_HANDLER );
     }
 
     private void removeSSLSessionHandler( IoSession session )
     {
-        synchronized( sslSessionHandlerMap )
-        {
-            sslSessionHandlerMap.remove( session );
-        }
+        session.removeAttribute( SSL_HANDLER );
     }
 
     private static class EncryptedBuffer extends ByteBufferProxy

Modified: directory/network/trunk/src/java/org/apache/mina/filter/SSLFilter.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/filter/SSLFilter.java?rev=188719&r1=188718&r2=188719&view=diff
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/filter/SSLFilter.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/filter/SSLFilter.java Mon Jun  6 23:46:50 2005
@@ -18,8 +18,6 @@
  */
 package org.apache.mina.filter;
 
-import java.util.IdentityHashMap;
-import java.util.Map;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -27,6 +25,7 @@
 import javax.net.ssl.SSLEngine;
 import javax.net.ssl.SSLException;
 import javax.net.ssl.SSLHandshakeException;
+import javax.net.ssl.SSLSession;
 
 import org.apache.mina.common.ByteBuffer;
 import org.apache.mina.common.ByteBufferProxy;
@@ -47,19 +46,18 @@
 public class SSLFilter extends IoFilterAdapter
 {
     /**
-     * Session attribute key that stores underlying {@link javax.net.ssl.SSLSession}
+     * Session attribute key that stores underlying {@link SSLSession}
      * for each session.
      */
     public static final String SSL_SESSION = SSLFilter.class.getName() + ".SSLSession";
+    
+    private static final String SSL_HANDLER = SSLFilter.class.getName() + ".SSLHandler";
 
     private static final Logger log = Logger.getLogger( SSLFilter.class.getName() );
 
     // SSL Context
     private SSLContext sslContext;
 
-    // Map used to map SSLHandler objects per session (key is IoSession)
-    private Map sslSessionHandlerMap = new IdentityHashMap();
-
     private boolean client;
     private boolean needClientAuth;
     private boolean wantClientAuth;
@@ -78,6 +76,16 @@
 
         this.sslContext = sslContext;
     }
+    
+    /**
+     * Returns the underlying {@link SSLSession} for the specified session.
+     * 
+     * @return <tt>null</tt> if no {@link SSLSession} is initialized yet.
+     */
+    public SSLSession getSSLSession( IoSession session )
+    {
+        return ( SSLSession ) session.getAttribute( SSL_SESSION );
+    }
 
     /**
      * Returns <tt>true</tt> if the engine is set to use client mode
@@ -476,12 +484,12 @@
 
     private SSLHandler createSSLSessionHandler( NextFilter nextFilter, IoSession session ) throws SSLException
     {
-        SSLHandler handler = ( SSLHandler ) sslSessionHandlerMap.get( session );
+        SSLHandler handler = getSSLSessionHandler( session );
         if( handler == null )
         {
-            synchronized( sslSessionHandlerMap )
+            synchronized( session )
             {
-                handler = ( SSLHandler ) sslSessionHandlerMap.get( session );
+                handler = getSSLSessionHandler( session );
                 if( handler == null )
                 {
                     boolean done = false;
@@ -489,7 +497,7 @@
                     {
                         handler =
                             new SSLHandler( this, sslContext, session );
-                        sslSessionHandlerMap.put( session, handler );
+                        session.setAttribute( SSL_HANDLER, handler );
                         handler.doHandshake( nextFilter );
                         done = true;
                     }
@@ -497,7 +505,7 @@
                     {
                         if( !done )
                         {
-                            sslSessionHandlerMap.remove( session );
+                            session.removeAttribute( SSL_HANDLER );
                         }
                     }
                 }
@@ -509,15 +517,12 @@
 
     private SSLHandler getSSLSessionHandler( IoSession session )
     {
-        return ( SSLHandler ) sslSessionHandlerMap.get( session );
+        return ( SSLHandler ) session.getAttribute( SSL_HANDLER );
     }
 
     private void removeSSLSessionHandler( IoSession session )
     {
-        synchronized( sslSessionHandlerMap )
-        {
-            sslSessionHandlerMap.remove( session );
-        }
+        session.removeAttribute( SSL_HANDLER );
     }
 
     private static class EncryptedBuffer extends ByteBufferProxy