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
commit 73e881ad935e5aa6080b90585ac8dc8ddfc377e1 Author: emmanuel lecharny <elecha...@apache.org> AuthorDate: Tue Apr 9 09:26:43 2019 +0200 Fixed some SSL code --- .../java/org/apache/mina/filter/ssl/SslFilter.java | 2 +- .../org/apache/mina/filter/ssl/SslHandler.java | 34 +++++++++++++++++++--- .../java/org/apache/mina/filter/ssl/SslTest.java | 1 - 3 files changed, 31 insertions(+), 6 deletions(-) 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 2638f0c..7fc2591 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 @@ -857,7 +857,7 @@ public class SslFilter extends IoFilterAdapter { * message, but not for handshake messages, which will be swallowed. * */ - private static class EncryptedWriteRequest extends DefaultWriteRequest { + /* package protected */ static class EncryptedWriteRequest extends DefaultWriteRequest { // Thee encrypted messagee private final IoBuffer encryptedMessage; 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 cbc6bd6..3da0fe4 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 @@ -33,6 +33,7 @@ import javax.net.ssl.SSLEngineResult.Status; import javax.net.ssl.SSLException; import javax.net.ssl.SSLHandshakeException; +import org.apache.mina.core.RuntimeIoException; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.filterchain.IoFilter.NextFilter; import org.apache.mina.core.filterchain.IoFilterEvent; @@ -42,6 +43,7 @@ import org.apache.mina.core.session.IoEventType; 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.filter.ssl.SslFilter.EncryptedWriteRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -528,9 +530,34 @@ class SslHandler { * UNDERFLOW - Need to read more data from the socket. It's normal. * CLOSED - The other peer closed the socket. Also normal. */ - if (status == SSLEngineResult.Status.BUFFER_OVERFLOW) { - throw new SSLException("SSLEngine error during decrypt: " + status + " inNetBuffer: " + inNetBuffer + switch (status) { + case BUFFER_OVERFLOW: + throw new SSLException("SSLEngine error during decrypt: " + status + " inNetBuffer: " + inNetBuffer + "appBuffer: " + appBuffer); + case CLOSED: + Exception exception =new RuntimeIoException("SSL/TLS close_notify received"); + + // Empty the Ssl queue + for (IoFilterEvent event:filterWriteEventQueue) { + EncryptedWriteRequest writeRequest = (EncryptedWriteRequest)event.getParameter(); + WriteFuture writeFuture = writeRequest.getParentRequest().getFuture(); + writeFuture.setException(exception); + writeFuture.notifyAll(); + } + + // Empty the session queue + while (!session.getWriteRequestQueue().isEmpty(session)) { + WriteRequest writeRequest = session.getWriteRequestQueue().poll( session ); + WriteFuture writeFuture = writeRequest.getFuture(); + writeFuture.setException(exception); + writeFuture.notifyAll(); + } + + // We *must* shutdown session + session.closeNow(); + break; + default: + break; } } @@ -595,8 +622,7 @@ class SslHandler { } // First make sure that the out buffer is completely empty. - // Since we - // cannot call wrap with data left on the buffer + // Since we cannot call wrap with data left on the buffer if (outNetBuffer != null && outNetBuffer.hasRemaining()) { return; } diff --git a/mina-core/src/test/java/org/apache/mina/filter/ssl/SslTest.java b/mina-core/src/test/java/org/apache/mina/filter/ssl/SslTest.java index 23d7fd8..e61bad6 100644 --- a/mina-core/src/test/java/org/apache/mina/filter/ssl/SslTest.java +++ b/mina-core/src/test/java/org/apache/mina/filter/ssl/SslTest.java @@ -152,7 +152,6 @@ public class SslTest { String line = in.readLine(); //System.out.println("Client got: " + line); socket.close(); - } private static SSLContext createSSLContext() throws IOException, GeneralSecurityException {