From f2b5fa18b58db09562d03a7d247e21c111e78056 Mon Sep 17 00:00:00 2001
From: Yannick Lecaillez <yannick.lecaillez@forgerock.com>
Date: Mon, 07 Nov 2016 13:59:40 +0000
Subject: [PATCH] OPENDJ-3179: Migrate LDAP Connection Handler to SDK Grizzly transport
---
opendj-grizzly/src/main/java/org/forgerock/opendj/grizzly/ASN1BufferReader.java | 44 ++++++++++++++++++++------------------------
1 files changed, 20 insertions(+), 24 deletions(-)
diff --git a/opendj-grizzly/src/main/java/org/forgerock/opendj/grizzly/ASN1BufferReader.java b/opendj-grizzly/src/main/java/org/forgerock/opendj/grizzly/ASN1BufferReader.java
index 1226bde..2618456 100644
--- a/opendj-grizzly/src/main/java/org/forgerock/opendj/grizzly/ASN1BufferReader.java
+++ b/opendj-grizzly/src/main/java/org/forgerock/opendj/grizzly/ASN1BufferReader.java
@@ -19,6 +19,7 @@
import static com.forgerock.opendj.ldap.CoreMessages.*;
import java.io.IOException;
+import java.nio.charset.Charset;
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.i18n.slf4j.LocalizedLogger;
@@ -29,9 +30,6 @@
import org.forgerock.opendj.ldap.ByteStringBuilder;
import org.forgerock.opendj.ldap.DecodeException;
import org.glassfish.grizzly.Buffer;
-import org.glassfish.grizzly.memory.BuffersBuffer;
-import org.glassfish.grizzly.memory.CompositeBuffer;
-import org.glassfish.grizzly.memory.MemoryManager;
/** Grizzly ASN1 reader implementation. */
final class ASN1BufferReader extends AbstractASN1Reader {
@@ -127,15 +125,16 @@
private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
- private static final int MAX_STRING_BUFFER_SIZE = 1024;
+ private int markState;
+ private SequenceLimiter markReadLimiter;
+
private int state = ASN1.ELEMENT_READ_STATE_NEED_TYPE;
private byte peekType;
private int peekLength = -1;
private int lengthBytesNeeded;
private final int maxElementSize;
- private final CompositeBuffer buffer;
+ private final Buffer buffer;
private SequenceLimiter readLimiter;
- private final byte[] stringBuffer;
/**
* Creates a new ASN1 reader whose source is the provided input stream and
@@ -147,11 +146,10 @@
* @param memoryManager
* The memory manager to use for buffering.
*/
- ASN1BufferReader(final int maxElementSize, final MemoryManager<?> memoryManager) {
+ ASN1BufferReader(final int maxElementSize, final Buffer buffer) {
this.readLimiter = new RootSequenceLimiter();
- this.stringBuffer = new byte[MAX_STRING_BUFFER_SIZE];
+ this.buffer = buffer;
this.maxElementSize = maxElementSize;
- this.buffer = BuffersBuffer.create(memoryManager);
}
/**
@@ -162,7 +160,7 @@
*/
@Override
public void close() throws IOException {
- buffer.dispose();
+ // Nothing to do
}
/**
@@ -388,26 +386,20 @@
return "";
}
- byte[] readBuffer;
- if (peekLength <= stringBuffer.length) {
- readBuffer = stringBuffer;
- } else {
- readBuffer = new byte[peekLength];
- }
-
readLimiter.checkLimit(peekLength);
- buffer.get(readBuffer, 0, peekLength);
state = ASN1.ELEMENT_READ_STATE_NEED_TYPE;
String str;
try {
- str = new String(readBuffer, 0, peekLength, "UTF-8");
+ str = buffer.toStringContent(Charset.forName("UTF-8"), buffer.position(), buffer.position() + peekLength);
} catch (final Exception e) {
// TODO: I18N
logger.warn(LocalizableMessage.raw("Unable to decode ASN.1 OCTETSTRING bytes as UTF-8 string: %s", e));
- str = new String(stringBuffer, 0, peekLength);
+ str = buffer.toStringContent(Charset.defaultCharset(), buffer.position(), buffer.position() + peekLength);
+ } finally {
+ buffer.position(buffer.position() + peekLength);
}
logger.trace("READ ASN.1 OCTETSTRING(type=0x%x, length=%d, value=%s)", peekType, peekLength, str);
@@ -453,12 +445,16 @@
return this;
}
- void appendBytesRead(final Buffer buffer) {
- this.buffer.append(buffer);
+ void mark() {
+ buffer.mark();
+ markState = state;
+ markReadLimiter = readLimiter;
}
- void disposeBytesRead() {
- this.buffer.shrink();
+ void reset() {
+ buffer.reset();
+ state = markState;
+ readLimiter = markReadLimiter;
}
/**
--
Gitblit v1.10.0