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/04/04 02:56:56 UTC

svn commit: r159974 - directory/network/trunk/src/java/org/apache/mina/io/filter/SSLByteBufferPool.java directory/network/trunk/src/java/org/apache/mina/io/filter/SSLHandler.java

Author: trustin
Date: Sun Apr  3 17:56:55 2005
New Revision: 159974

URL: http://svn.apache.org/viewcvs?view=rev&rev=159974
Log:
Applied Janne's SSL filter patch that fixes: DIRMINA-14


Modified:
    directory/network/trunk/src/java/org/apache/mina/io/filter/SSLByteBufferPool.java
    directory/network/trunk/src/java/org/apache/mina/io/filter/SSLHandler.java

Modified: directory/network/trunk/src/java/org/apache/mina/io/filter/SSLByteBufferPool.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/io/filter/SSLByteBufferPool.java?view=diff&r1=159973&r2=159974
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/io/filter/SSLByteBufferPool.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/io/filter/SSLByteBufferPool.java Sun Apr  3 17:56:55 2005
@@ -75,8 +75,8 @@
 
             // application buffer size has been doubled because SSLEngine
             // returns BUFFER_OVERFLOW even if there is enough room for the buffer.
-            // So I doubled the size as a workaround.
-            appBufferSize = sslEngine.getSession().getApplicationBufferSize() * 2;
+            // So for now we use a size double the packet size as a workaround.
+            appBufferSize = packetBufferSize * 2;
             initiateBufferStacks();
             initiated = true;
         }

Modified: directory/network/trunk/src/java/org/apache/mina/io/filter/SSLHandler.java
URL: http://svn.apache.org/viewcvs/directory/network/trunk/src/java/org/apache/mina/io/filter/SSLHandler.java?view=diff&r1=159973&r2=159974
==============================================================================
--- directory/network/trunk/src/java/org/apache/mina/io/filter/SSLHandler.java (original)
+++ directory/network/trunk/src/java/org/apache/mina/io/filter/SSLHandler.java Sun Apr  3 17:56:55 2005
@@ -160,9 +160,14 @@
             // We have to expand inNetBuffer
             inNetBuffer = SSLByteBufferPool.expandBuffer( inNetBuffer,
                     2 * (inNetBuffer.position() + buf.limit()) );
+            // We also expand app. buffer (twice the size of in net. buffer)
+            appBuffer = SSLByteBufferPool.expandBuffer( appBuffer, inNetBuffer.capacity() * 2);
+            appBuffer.position( 0 );
+            appBuffer.limit( 0 );
             if( parent.debug != null )
             {
                 parent.debug.print("expanded inNetBuffer:" + inNetBuffer);
+                parent.debug.print("expanded appBuffer:" + appBuffer);
             }
         }
 
@@ -261,6 +266,9 @@
 
         if( appBuffer.hasRemaining() )
         {
+             if ( parent.debug != null ) {
+                 parent.debug.print( "Error: appBuffer not empty!" );
+             }
             //still app data in buffer!?
             throw new IllegalStateException();
         }
@@ -279,7 +287,8 @@
             status != SSLEngineResult.Status.BUFFER_UNDERFLOW )
         {
             throw new SSLException( "SSLEngine error during decrypt: " +
-                                    status );
+                                    status +
+                                    " inNetBuffer: " + inNetBuffer + "appBuffer: " + appBuffer);
         }
         
         return status;
@@ -301,11 +310,11 @@
         // Loop until there is no more data in src
         while ( src.hasRemaining() ) {
 
-            if ( src.limit() > ( outNetBuffer.remaining() / 2 ) ) {
+            if ( src.remaining() > ( ( outNetBuffer.capacity() - outNetBuffer.position() ) / 2 ) ) {
                 // We have to expand outNetBuffer
                 // Note: there is no way to know the exact size required, but enrypted data
                 // shouln't need to be larger than twice the source data size?
-                outNetBuffer = SSLByteBufferPool.expandBuffer( outNetBuffer, src.limit() * 2 );
+                outNetBuffer = SSLByteBufferPool.expandBuffer( outNetBuffer, src.capacity() * 2 );
                 if ( parent.debug != null ) {
                     parent.debug.print( "expanded outNetBuffer:" + outNetBuffer );
                 }
@@ -322,13 +331,14 @@
                 }
             } else {
                 throw new SSLException( "SSLEngine error during encrypt: "
-                        + result.getStatus() );
+                        + result.getStatus() +
+                        " src: " + src + "outNetBuffer: " + outNetBuffer);
             }
         }
 
         outNetBuffer.flip();
     }
-    
+
     /**
      * Perform any handshaking processing.
      */