[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