From bdb54bc45ce05fcb01e106a8e9b52db188579efd Mon Sep 17 00:00:00 2001
From: matthew_swift <matthew_swift@localhost>
Date: Wed, 25 Nov 2009 10:05:23 +0000
Subject: [PATCH] Fix issue 4360 - OpenDS does not answer anymore when doing 24+ simultaneous subtree searches without reading the response.
---
opends/src/server/org/opends/server/extensions/TLSByteChannel.java | 39 ++++++++++++++-------------------------
1 files changed, 14 insertions(+), 25 deletions(-)
diff --git a/opends/src/server/org/opends/server/extensions/TLSByteChannel.java b/opends/src/server/org/opends/server/extensions/TLSByteChannel.java
index a363aab..ff85170 100644
--- a/opends/src/server/org/opends/server/extensions/TLSByteChannel.java
+++ b/opends/src/server/org/opends/server/extensions/TLSByteChannel.java
@@ -26,24 +26,24 @@
*/
package org.opends.server.extensions;
+import static org.opends.server.loggers.debug.DebugLogger.debugEnabled;
+import static org.opends.server.loggers.debug.DebugLogger.getTracer;
+
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.ByteChannel;
import java.nio.channels.ClosedChannelException;
-import java.nio.channels.SocketChannel;
import java.security.cert.Certificate;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
+
import javax.net.ssl.*;
import org.opends.server.admin.std.server.LDAPConnectionHandlerCfg;
import org.opends.server.api.ClientConnection;
import org.opends.server.loggers.debug.DebugTracer;
import org.opends.server.types.DebugLogLevel;
-import org.opends.server.util.StaticUtils;
-
-import static org.opends.server.loggers.debug.DebugLogger.*;
/**
* A class that provides a TLS byte channel implementation.
@@ -54,19 +54,19 @@
private static final DebugTracer TRACER = getTracer();
- private ClientConnection connection;
- private SocketChannel socketChannel;
+ private final ClientConnection connection;
+ private final ByteChannel socketChannel;
- private SSLEngine sslEngine;
+ private final SSLEngine sslEngine;
//read copy to buffer
- private ByteBuffer appData;
+ private final ByteBuffer appData;
//read encrypted
- private ByteBuffer appNetData;
+ private final ByteBuffer appNetData;
//Write encrypted
- private ByteBuffer netData, tempData;
- private int sslBufferSize, appBufSize;
+ private final ByteBuffer netData, tempData;
+ private final int sslBufferSize, appBufSize;
private boolean reading = false;
//Map of cipher phrases to effective key size (bits). Taken from the
@@ -92,7 +92,7 @@
};
private TLSByteChannel(LDAPConnectionHandlerCfg config, ClientConnection c,
- SocketChannel socketChannel, SSLContext sslContext) {
+ ByteChannel socketChannel, SSLContext sslContext) {
this.socketChannel = socketChannel;
this.connection = c;
@@ -159,7 +159,7 @@
*/
public static TLSByteChannel
getTLSByteChannel(LDAPConnectionHandlerCfg config, ClientConnection c,
- SSLContext sslContext, SocketChannel socketChannel) {
+ SSLContext sslContext, ByteChannel socketChannel) {
return new TLSByteChannel(config, c, socketChannel, sslContext);
}
@@ -375,18 +375,7 @@
hsStatus == SSLEngineResult.HandshakeStatus.NEED_WRAP ||
hsStatus == SSLEngineResult.HandshakeStatus.NEED_UNWRAP)
doHandshakeWrite(hsStatus);
- while (netData.hasRemaining()) {
- int bytesWritten = socketChannel.write(netData);
- if (bytesWritten < 0)
- throw new ClosedChannelException();
- else if (bytesWritten == 0) {
- int bytesSent = netData.remaining();
- if(!StaticUtils.writeWithTimeout(connection, netData))
- throw new ClosedChannelException();
- totBytesSent += bytesSent;
- } else
- totBytesSent += bytesWritten;
- }
+ totBytesSent += socketChannel.write(netData);
}
return totBytesSent;
}
--
Gitblit v1.10.0