Author: elecharny
Date: Sun Dec 11 18:29:36 2011
New Revision: 1213038

URL: http://svn.apache.org/viewvc?rev=1213038&view=rev
Log:
Handling the data being received on a secured connection

Modified:
    
mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/NioSelectorProcessor.java

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=1213038&r1=1213037&r2=1213038&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
 Sun Dec 11 18:29:36 2011
@@ -474,15 +474,41 @@ public class NioSelectorProcessor implem
                 // limit at the current position & rewind buffer back to start 
& push to the chain
                 readBuffer.flip();
 
-                if (session.isSecured() && !session.isConnectedSecured()) {
-                    // Process the SSL handshake now
-                    processHandShake(session, readBuffer);
+                if (session.isSecured()) {
+                    if (!session.isConnectedSecured()) {
+                        // Process the SSL handshake now
+                        processHandShake(session, readBuffer);
+                    } else {
+                        // Unwrap the incoming data
+                        processUnwrap(session, readBuffer);
+                    }
                 } else {
+                    // Plain message, not encrypted : go directly to the chain
                     session.getFilterChain().processMessageReceived(session, 
readBuffer);
                 }
             }
         }
 
+        private void processUnwrap(IoSession session, ByteBuffer inBuffer) 
throws SSLException {
+            SslHelper sslHelper = session.getAttribute( IoSession.SSL_HELPER );
+            
+            if (sslHelper == null) {
+                throw new IllegalStateException();
+            }
+            
+            SSLEngine engine = sslHelper.getEngine();
+            
+            // Blind guess : once uncompressed, the resulting buffer will be 3 
times bigger
+            ByteBuffer appBuffer = ByteBuffer.allocate(inBuffer.limit() * 3 );
+            Status status = sslHelper.processUnwrap(engine, inBuffer, 
appBuffer );
+            appBuffer.flip();
+            
+            if (status == Status.OK) {
+                // Ok, go through the chain now
+                session.getFilterChain().processMessageReceived(session, 
appBuffer);
+            }
+        }
+        
         private boolean processHandShake(IoSession session, ByteBuffer 
inBuffer) throws SSLException {
             SslHelper sslHelper = session.getAttribute(IoSession.SSL_HELPER);
 


Reply via email to