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