From b59e161bd2d26df6023efea77353c8f3f61dd37b 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-server-legacy/src/main/java/org/forgerock/opendj/reactive/LDAPClientConnection2.java |   30 ++++++++++++++++++++++++++++++
 1 files changed, 30 insertions(+), 0 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/forgerock/opendj/reactive/LDAPClientConnection2.java b/opendj-server-legacy/src/main/java/org/forgerock/opendj/reactive/LDAPClientConnection2.java
index 7341f9b..0e14bea 100644
--- a/opendj-server-legacy/src/main/java/org/forgerock/opendj/reactive/LDAPClientConnection2.java
+++ b/opendj-server-legacy/src/main/java/org/forgerock/opendj/reactive/LDAPClientConnection2.java
@@ -34,6 +34,7 @@
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicLong;
 
+import org.forgerock.i18n.LocalizableException;
 import org.forgerock.i18n.LocalizableMessage;
 import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.forgerock.i18n.slf4j.LocalizedLogger;
@@ -41,7 +42,9 @@
 import org.forgerock.opendj.ldap.ByteString;
 import org.forgerock.opendj.ldap.DN;
 import org.forgerock.opendj.ldap.LDAPClientContext;
+import org.forgerock.opendj.ldap.LDAPClientContext.DisconnectListener;
 import org.forgerock.opendj.ldap.ResultCode;
+import org.forgerock.opendj.ldap.requests.UnbindRequest;
 import org.forgerock.opendj.ldap.responses.CompareResult;
 import org.forgerock.opendj.ldap.responses.Response;
 import org.forgerock.opendj.ldap.responses.Responses;
@@ -221,6 +224,33 @@
     }
 
     connectionID = DirectoryServer.newConnectionAccepted(this);
+    clientContext.onDisconnect(new DisconnectListener()
+    {
+      @Override
+      public void exceptionOccurred(LDAPClientContext context, Throwable error)
+      {
+        if (error instanceof LocalizableException)
+        {
+          disconnect(DisconnectReason.PROTOCOL_ERROR, true, ((LocalizableException) error).getMessageObject());
+        }
+        else
+        {
+          disconnect(DisconnectReason.PROTOCOL_ERROR, true, null);
+        }
+      }
+
+      @Override
+      public void connectionDisconnected(LDAPClientContext context, ResultCode resultCode, String diagnosticMessage)
+      {
+        disconnect(DisconnectReason.SERVER_ERROR, false, null);
+      }
+
+      @Override
+      public void connectionClosed(LDAPClientContext context, UnbindRequest unbindRequest)
+      {
+        disconnect(DisconnectReason.CLIENT_DISCONNECT, false, null);
+      }
+    });
   }
 
   /**

--
Gitblit v1.10.0