From 783567420fd8109f172b5ab3f299ef750bac8805 Mon Sep 17 00:00:00 2001 From: Scott Mitchell Date: Fri, 27 May 2016 20:52:56 -0700 Subject: [PATCH] OpenSslEngine encrypt more data per wrap call Motivation: OpenSslEngine.wrap will only encrypt at most 1 buffer per call. We may be able to encrypt multiple buffers per call. Modifications: - OpensslEngine.wrap should continue encrypting data until there is an error, no more data, or until the destination buffer would be overflowed. Result: More encryption is done per OpenSslEngine.wrap call --- .../src/main/java/io/netty/handler/ssl/OpenSslEngine.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/handler/src/main/java/io/netty/handler/ssl/OpenSslEngine.java b/handler/src/main/java/io/netty/handler/ssl/OpenSslEngine.java index 1b85a47b85..622e101cb5 100644 --- a/handler/src/main/java/io/netty/handler/ssl/OpenSslEngine.java +++ b/handler/src/main/java/io/netty/handler/ssl/OpenSslEngine.java @@ -42,6 +42,7 @@ import java.util.concurrent.atomic.AtomicIntegerFieldUpdater; import javax.net.ssl.SSLEngine; import javax.net.ssl.SSLEngineResult; import javax.net.ssl.SSLEngineResult.HandshakeStatus; +import javax.net.ssl.SSLEngineResult.Status; import javax.net.ssl.SSLException; import javax.net.ssl.SSLHandshakeException; import javax.net.ssl.SSLParameters; @@ -525,7 +526,10 @@ public final class OpenSslEngine extends SSLEngine { pendingNetResult = readPendingBytesFromBIO(dst, bytesConsumed, bytesProduced, status); if (pendingNetResult != null) { - return pendingNetResult; + if (pendingNetResult.getStatus() != OK) { + return pendingNetResult; + } + bytesProduced = pendingNetResult.bytesProduced(); } } else { int sslError = SSL.getError(ssl, result); @@ -1257,7 +1261,7 @@ public final class OpenSslEngine extends SSLEngine { return FINISHED; } - private SSLEngineResult.Status getEngineStatus() { + private Status getEngineStatus() { return engineClosed? CLOSED : OK; }