From 108b077a4d03ab70950bdfe4f07d231422239dbe Mon Sep 17 00:00:00 2001
From: dugan <dugan@localhost>
Date: Fri, 22 Sep 2006 13:30:55 +0000
Subject: [PATCH] Fix typo and add check for AbandonOp in LDAPMessage request.

---
 opends/src/server/org/opends/server/protocols/ldap/UnbindRequestProtocolOp.java |   78 +++++++++++++++++---------------------
 1 files changed, 35 insertions(+), 43 deletions(-)

diff --git a/opends/src/server/org/opends/server/protocols/ldap/UnbindRequestProtocolOp.java b/opends/src/server/org/opends/server/protocols/ldap/UnbindRequestProtocolOp.java
index 84fb172..b5edcb0 100644
--- a/opends/src/server/org/opends/server/protocols/ldap/UnbindRequestProtocolOp.java
+++ b/opends/src/server/org/opends/server/protocols/ldap/UnbindRequestProtocolOp.java
@@ -36,6 +36,7 @@
 import org.opends.server.protocols.asn1.ASN1Null;
 import org.opends.server.types.Control;
 import org.opends.server.types.ResultCode;
+import org.opends.server.api.ClientConnection;
 
 import static org.opends.server.loggers.Debug.*;
 import static org.opends.server.messages.MessageHandler.*;
@@ -44,8 +45,6 @@
 import static org.opends.server.protocols.ldap.LDAPResultCode.*;
 import static org.opends.server.util.ServerConstants.*;
 
-
-
 /**
  * This class defines the structures and methods for an LDAP unbind request
  * protocol op, which is used to indicate that the client wishes to disconnect
@@ -156,56 +155,49 @@
    *                           protocol op.
    * @param  clientConnection  The client connection from which the request was
    *                           read.
-   *
+   * @param  nextOperationID  The next ldap operation id that would be used for
+   *                          this connection.
    * @return  The unbind operation created from the provided request message.
    *
    * @throws  DirectoryException  If the provided LDAP message cannot be decoded
-   *                              as an unbind operation.
+   *                              as an unbind operation or if the LDAPMessage
+   *                              protocol operation is not an AbandonOperation.
    */
   public static UnbindOperation messageToUnbindOperation(
-                                      LDAPMessage requestMessage,
-                                      LDAPClientConnection clientConnection)
-         throws DirectoryException
+          LDAPMessage requestMessage, ClientConnection clientConnection,
+          int nextOperationID)
+  throws DirectoryException
   {
-    assert debugEnter(CLASS_NAME, "messageToAbandonOperation",
-                      String.valueOf(requestMessage),
-                      String.valueOf(clientConnection));
-
-    UnbindRequestProtocolOp unbindRequest;
-    try
-    {
-      unbindRequest =
-           (UnbindRequestProtocolOp) requestMessage.getProtocolOp();
-    }
-    catch (Exception e)
-    {
-      assert debugException(CLASS_NAME, "messageToUnbindOperation", e);
-
-      int msgID = MSGID_LDAP_UNBIND_INVALID_MESSAGE_TYPE;
-      String message = getMessage(msgID, String.valueOf(requestMessage),
-                                  String.valueOf(e));
-      throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message, msgID,
-                                   e);
-    }
-
-    ArrayList<Control> controls;
-    ArrayList<LDAPControl> ldapControls = requestMessage.getControls();
-    if ((ldapControls == null) || ldapControls.isEmpty())
-    {
-      controls = null;
-    }
-    else
-    {
-      controls = new ArrayList<Control>(ldapControls.size());
-      for (LDAPControl c : ldapControls)
+      assert debugEnter(CLASS_NAME, "messageToUnbindOperation",
+              String.valueOf(requestMessage),
+              String.valueOf(clientConnection));
+      ProtocolOp op=requestMessage.getProtocolOp();
+      if(!(op instanceof AbandonRequestProtocolOp))
       {
-        controls.add(c.getControl());
+          int msgID = MSGID_LDAP_UNBIND_INVALID_MESSAGE_TYPE;
+          String message = getMessage(msgID, String.valueOf(requestMessage));
+          throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
+                                                             message, msgID);
       }
-    }
 
-    return new UnbindOperation(clientConnection,
-                               clientConnection.nextOperationID(),
-                               requestMessage.getMessageID(), controls);
+      ArrayList<Control> controls;
+      ArrayList<LDAPControl> ldapControls = requestMessage.getControls();
+      if ((ldapControls == null) || ldapControls.isEmpty())
+      {
+          controls = null;
+      }
+      else
+      {
+          controls = new ArrayList<Control>(ldapControls.size());
+          for (LDAPControl c : ldapControls)
+          {
+              controls.add(c.getControl());
+          }
+      }
+
+      return new UnbindOperation(clientConnection,
+              nextOperationID, requestMessage.getMessageID(),
+              controls);
   }
 
 

--
Gitblit v1.10.0