[prev in list] [next in list] [prev in thread] [next in thread] 

List:       mina-commits
Subject:    [mina] branch mina-write-request updated: Fixed the SslFilter test failures
From:       elecharny () apache ! org
Date:       2019-03-26 10:06:28
Message-ID: 155359478834.24217.13789212653803324313 () gitbox ! apache ! org
[Download RAW message or body]

This is an automated email from the ASF dual-hosted git repository.

elecharny pushed a commit to branch mina-write-request
in repository https://gitbox.apache.org/repos/asf/mina.git


The following commit(s) were added to refs/heads/mina-write-request by this push:
     new 1eb39be  Fixed the SslFilter test failures
1eb39be is described below

commit 1eb39bedb4e524b2a37ca0808b4747006f6b4832
Author: emmanuel lecharny <elecharny@apache.org>
AuthorDate: Tue Mar 26 11:06:24 2019 +0100

    Fixed the SslFilter test failures
---
 .../core/polling/AbstractPollingIoProcessor.java   |  2 +-
 .../org/apache/mina/core/write/WriteRequest.java   |  1 -
 .../java/org/apache/mina/filter/ssl/SslFilter.java | 51 +++++++++++++++++++++-
 .../org/apache/mina/filter/ssl/SslHandler.java     |  7 +++
 4 files changed, 57 insertions(+), 4 deletions(-)

diff --git a/mina-core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java \
b/mina-core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java
 index 4a75f41..1553a99 100644
--- a/mina-core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java
                
+++ b/mina-core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java
 @@ -1117,7 +1117,7 @@ public abstract class AbstractPollingIoProcessor<S extends \
AbstractIoSession> im  
                 session.increaseWrittenBytes(localWrittenBytes, currentTime);
 
-                // Now, forward the original message if ity has been fully sent
+                // Now, forward the original message if it has been fully sent
                 if (!buf.hasRemaining() || (!hasFragmentation && (localWrittenBytes \
!= 0))) {  this.fireMessageSent(session, req);
                 }
diff --git a/mina-core/src/main/java/org/apache/mina/core/write/WriteRequest.java \
b/mina-core/src/main/java/org/apache/mina/core/write/WriteRequest.java index \
                861cea6..17953c5 100644
--- a/mina-core/src/main/java/org/apache/mina/core/write/WriteRequest.java
+++ b/mina-core/src/main/java/org/apache/mina/core/write/WriteRequest.java
@@ -21,7 +21,6 @@ package org.apache.mina.core.write;
 
 import java.net.SocketAddress;
 
-import org.apache.mina.core.buffer.IoBuffer;
 import org.apache.mina.core.filterchain.IoFilter;
 import org.apache.mina.core.future.WriteFuture;
 import org.apache.mina.core.session.IoSession;
diff --git a/mina-core/src/main/java/org/apache/mina/filter/ssl/SslFilter.java \
b/mina-core/src/main/java/org/apache/mina/filter/ssl/SslFilter.java index \
                7e8fa22..2638f0c 100644
--- a/mina-core/src/main/java/org/apache/mina/filter/ssl/SslFilter.java
+++ b/mina-core/src/main/java/org/apache/mina/filter/ssl/SslFilter.java
@@ -41,6 +41,7 @@ import org.apache.mina.core.service.IoAcceptor;
 import org.apache.mina.core.service.IoHandler;
 import org.apache.mina.core.session.AttributeKey;
 import org.apache.mina.core.session.IoSession;
+import org.apache.mina.core.write.DefaultWriteRequest;
 import org.apache.mina.core.write.WriteRequest;
 import org.apache.mina.core.write.WriteToClosedSessionException;
 import org.slf4j.Logger;
@@ -554,7 +555,12 @@ public class SslFilter extends IoFilterAdapter {
 
     @Override
     public void messageSent(NextFilter nextFilter, IoSession session, WriteRequest \
                writeRequest) {
-        nextFilter.messageSent(session, writeRequest.getOriginalRequest());
+        if (writeRequest instanceof EncryptedWriteRequest) {
+            EncryptedWriteRequest wrappedRequest = (EncryptedWriteRequest) \
writeRequest; +            nextFilter.messageSent(session, \
wrappedRequest.getParentRequest()); +        } else {
+            // ignore extra buffers used for handshaking
+        }
     }
 
     @Override
@@ -648,7 +654,8 @@ public class SslFilter extends IoFilterAdapter {
                         sslHandler.encrypt(buf.buf());
                         IoBuffer encryptedBuffer = sslHandler.fetchOutNetBuffer();
                         writeRequest.setMessage( encryptedBuffer );
-                        sslHandler.scheduleFilterWrite(nextFilter, writeRequest);
+                        sslHandler.scheduleFilterWrite(nextFilter, new \
EncryptedWriteRequest(writeRequest, +                            encryptedBuffer));
                     } else {
                         if (session.isConnected()) {
                             // Handshake not complete yet.
@@ -843,4 +850,44 @@ public class SslFilter extends IoFilterAdapter {
             return name;
         }
     }
+    
+    /**
+     * A private class used to store encrypted messages. This is necessary
+     * to be able to emit the messageSent event with the proper original
+     * message, but not for handshake messages, which will be swallowed.
+     *
+     */
+    private static class EncryptedWriteRequest extends DefaultWriteRequest {
+        // Thee encrypted messagee
+        private final IoBuffer encryptedMessage;
+        
+        // The original message
+        private WriteRequest parentRequest;
+
+        /**
+         * Create a new instance of an EncryptedWriteRequest
+         * @param writeRequest The parent request
+         * @param encryptedMessage The encrypted message
+         */
+        private EncryptedWriteRequest(WriteRequest writeRequest, IoBuffer \
encryptedMessage) { +            super(encryptedMessage);
+            parentRequest = writeRequest;
+            this.encryptedMessage = encryptedMessage;
+        }
+
+        /**
+         * @return teh encrypted message
+         */
+        @Override
+        public Object getMessage() {
+            return encryptedMessage;
+        }
+
+        /**
+         * @return The parent WriteRequest
+         */
+        public WriteRequest getParentRequest() {
+            return parentRequest;
+        }
+    }
 }
diff --git a/mina-core/src/main/java/org/apache/mina/filter/ssl/SslHandler.java \
b/mina-core/src/main/java/org/apache/mina/filter/ssl/SslHandler.java index \
                9626c6f..cbc6bd6 100644
--- a/mina-core/src/main/java/org/apache/mina/filter/ssl/SslHandler.java
+++ b/mina-core/src/main/java/org/apache/mina/filter/ssl/SslHandler.java
@@ -264,6 +264,13 @@ class SslHandler {
         return handshakeComplete;
     }
 
+    /**
+     * Check if handshake is on going.
+     */
+    /* no qualifier */boolean notHandshaking() {
+        return handshakeStatus == HandshakeStatus.FINISHED || handshakeStatus == \
HandshakeStatus.NOT_HANDSHAKING; +    }
+
     /* no qualifier */boolean isInboundDone() {
         return sslEngine == null || sslEngine.isInboundDone();
     }


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic