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/GrizzlyUtils.java | 34 ++++++++++++++++++----------------
1 files changed, 18 insertions(+), 16 deletions(-)
diff --git a/opendj-grizzly/src/main/java/org/forgerock/opendj/grizzly/GrizzlyUtils.java b/opendj-grizzly/src/main/java/org/forgerock/opendj/grizzly/GrizzlyUtils.java
index 2881ab2..0cd00f2 100644
--- a/opendj-grizzly/src/main/java/org/forgerock/opendj/grizzly/GrizzlyUtils.java
+++ b/opendj-grizzly/src/main/java/org/forgerock/opendj/grizzly/GrizzlyUtils.java
@@ -11,7 +11,7 @@
* Header, with the fields enclosed by brackets [] replaced by your own identifying
* information: "Portions Copyright [year] [name of copyright owner]".
*
- * Copyright 2013-2015 ForgeRock AS.
+ * Copyright 2013-2016 ForgeRock AS.
*/
package org.forgerock.opendj.grizzly;
@@ -31,7 +31,9 @@
import org.glassfish.grizzly.filterchain.Filter;
import org.glassfish.grizzly.filterchain.FilterChain;
import org.glassfish.grizzly.filterchain.FilterChainBuilder;
+import org.glassfish.grizzly.filterchain.FilterChainEnabledTransport;
import org.glassfish.grizzly.filterchain.TransportFilter;
+import org.glassfish.grizzly.memory.BuffersBuffer;
import org.glassfish.grizzly.memory.MemoryManager;
import org.glassfish.grizzly.nio.transport.TCPNIOConnection;
import org.glassfish.grizzly.ssl.SSLFilter;
@@ -65,11 +67,14 @@
* is a {@code FilterChain}, and having the provided filter as the
* last filter
*/
- static FilterChain buildFilterChain(Processor<?> processor, Filter filter) {
+ static FilterChain buildFilterChain(Processor<?> processor, Filter... filters) {
if (processor instanceof FilterChain) {
- return FilterChainBuilder.stateless().addAll((FilterChain) processor).add(filter).build();
+ return FilterChainBuilder.stateless().addAll((FilterChain) processor).addAll(filters).build();
+ } else if (processor instanceof FilterChainEnabledTransport) {
+ return FilterChainBuilder.stateless().add(((FilterChainEnabledTransport) processor).getTransportFilter())
+ .addAll(filters).build();
} else {
- return FilterChainBuilder.stateless().add(new TransportFilter()).add(filter).build();
+ return FilterChainBuilder.stateless().add(new TransportFilter()).addAll(filters).build();
}
}
@@ -113,17 +118,14 @@
*/
static FilterChain addFilterToChain(final Filter filter, final FilterChain chain) {
// By default, before LDAP filter which is the last one
- int indexToAddFilter = chain.size() - 1;
if (filter instanceof SSLFilter) {
- // Before any ConnectionSecurityLayerFilters if present
- for (int i = chain.size() - 2; i >= 0; i--) {
- if (!(chain.get(i) instanceof ConnectionSecurityLayerFilter)) {
- indexToAddFilter = i + 1;
- break;
- }
- }
+ return FilterChainBuilder.stateless().addAll(chain).add(1, filter).build();
}
- return FilterChainBuilder.stateless().addAll(chain).add(indexToAddFilter, filter).build();
+ if (filter instanceof SaslFilter) {
+ final int pos = chain.get(1) instanceof SSLFilter ? 2 : 1;
+ return FilterChainBuilder.stateless().addAll(chain).add(pos, filter).build();
+ }
+ return FilterChainBuilder.stateless().addAll(chain).add(chain.size() - 1, filter).build();
}
/**
@@ -141,7 +143,7 @@
*/
static LDAPReader<ASN1BufferReader> createReader(DecodeOptions decodeOptions,
int maxASN1ElementSize, MemoryManager<?> memoryManager) {
- ASN1BufferReader asn1Reader = new ASN1BufferReader(maxASN1ElementSize, memoryManager);
+ ASN1BufferReader asn1Reader = new ASN1BufferReader(maxASN1ElementSize, BuffersBuffer.create(memoryManager));
return LDAP.getReader(asn1Reader, decodeOptions);
}
@@ -155,10 +157,10 @@
* @return a LDAP writer
*/
@SuppressWarnings("unchecked")
- static LDAPWriter<ASN1BufferWriter> getWriter() {
+ static LDAPWriter<ASN1BufferWriter> getWriter(final MemoryManager memoryManager) {
LDAPWriter<ASN1BufferWriter> writer = ThreadCache.takeFromCache(WRITER_INDEX);
if (writer == null) {
- writer = LDAP.getWriter(new ASN1BufferWriter());
+ writer = LDAP.getWriter(new ASN1BufferWriter(memoryManager));
}
writer.getASN1Writer().reset();
return writer;
--
Gitblit v1.10.0