From 22094368c2865dcfb6daf8366425212b721a4657 Mon Sep 17 00:00:00 2001
From: matthew_swift <matthew_swift@localhost>
Date: Thu, 05 Feb 2009 17:42:14 +0000
Subject: [PATCH] Merge ASN1 branch to trunk
---
opends/tests/unit-tests-testng/src/server/org/opends/server/plugins/DisconnectClientPlugin.java | 155 ++++++++++++++++++++++++++++++++-------------------
1 files changed, 97 insertions(+), 58 deletions(-)
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/plugins/DisconnectClientPlugin.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/plugins/DisconnectClientPlugin.java
index d8e13e6..61581f5 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/plugins/DisconnectClientPlugin.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/plugins/DisconnectClientPlugin.java
@@ -31,16 +31,20 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
+import java.io.IOException;
import org.opends.server.admin.std.server.PluginCfg;
import org.opends.server.api.plugin.*;
import org.opends.server.config.ConfigException;
-import org.opends.server.protocols.asn1.ASN1OctetString;
import org.opends.server.protocols.ldap.LDAPControl;
-import org.opends.server.types.Control;
-import org.opends.server.types.DisconnectReason;
-import org.opends.server.types.CanceledOperationException;
+import org.opends.server.protocols.asn1.ASN1Reader;
+import org.opends.server.protocols.asn1.ASN1;
+import org.opends.server.protocols.asn1.ASN1Writer;
+import static org.opends.server.protocols.asn1.ASN1Constants.UNIVERSAL_OCTET_STRING_TYPE;
+import org.opends.server.types.*;
import org.opends.server.types.operation.*;
+import org.opends.server.controls.ControlDecoder;
+import org.opends.server.loggers.ErrorLogger;
import org.opends.messages.Message;
@@ -70,6 +74,78 @@
"1.3.6.1.4.1.26027.1.999.2";
+ /**
+ * The control used by this plugin.
+ */
+ public static class DisconnectClientControl extends Control
+ {
+ /**
+ * ControlDecoder implentation to decode this control from a ByteString.
+ */
+ private final static class Decoder
+ implements ControlDecoder<DisconnectClientControl>
+ {
+ /**
+ * {@inheritDoc}
+ */
+ public DisconnectClientControl decode(boolean isCritical,
+ ByteString value)
+ throws DirectoryException
+ {
+ return new DisconnectClientControl(isCritical, value.toString());
+ }
+
+ public String getOID()
+ {
+ return OID_DISCONNECT_REQUEST;
+ }
+
+ }
+
+ /**
+ * The Control Decoder that can be used to decode this control.
+ */
+ public static final ControlDecoder<DisconnectClientControl> DECODER =
+ new Decoder();
+
+
+ private String section;
+
+ /**
+ * Constructs a new change number control.
+ *
+ * @param isCritical Indicates whether support for this control should be
+ * considered a critical part of the server processing.
+ * @param section The section to use for the disconnect.
+ */
+ public DisconnectClientControl(boolean isCritical, String section)
+ {
+ super(OID_DISCONNECT_REQUEST, isCritical);
+ this.section = section;
+ }
+
+ /**
+ * Writes this control's value to an ASN.1 writer. The value (if any)
+ * must be written as an ASN1OctetString.
+ *
+ * @param writer The ASN.1 writer to use.
+ * @throws java.io.IOException If a problem occurs while writing to the stream.
+ */
+ @Override
+ protected void writeValue(ASN1Writer writer) throws IOException {
+ writer.writeOctetString(section);
+ }
+
+ /**
+ * Retrieves the delay duration.
+ *
+ * @return The delay duration.
+ */
+ public String getSection()
+ {
+ return section;
+ }
+ }
/**
* Creates a new instance of this Directory Server plugin. Every
@@ -667,24 +743,25 @@
private boolean disconnectInternal(PluginOperation operation,
String section)
{
- List<Control> requestControls = operation.getRequestControls();
- if (requestControls != null)
+ try
{
- for (Control c : requestControls)
- {
- if (c.getOID().equals(OID_DISCONNECT_REQUEST))
- {
- if (c.getValue().stringValue().equalsIgnoreCase(section))
- {
- operation.disconnectClient(DisconnectReason.CLOSED_BY_PLUGIN, true,
- Message.raw("Closed by disconnect client plugin (section " +
- section + ")"));
+ DisconnectClientControl control =
+ operation.getRequestControl(DisconnectClientControl.DECODER);
- return true;
- }
- }
+ if (control != null && control.getSection().equalsIgnoreCase(section))
+ {
+ operation.disconnectClient(DisconnectReason.CLOSED_BY_PLUGIN, true,
+ Message.raw("Closed by disconnect client plugin (section " +
+ section + ")"));
+
+ return true;
}
}
+ catch (Exception e)
+ {
+ ErrorLogger.logError(Message.raw("Unable to decode the disconnect client control: " +
+ e));
+ }
// If we've gotten here, then we shouldn't disconnect the client.
@@ -702,8 +779,7 @@
*/
public static Control createDisconnectControl(String section)
{
- return new Control(OID_DISCONNECT_REQUEST, false,
- new ASN1OctetString(section));
+ return new DisconnectClientControl(false, section);
}
@@ -720,44 +796,7 @@
{
ArrayList<Control> controlList = new ArrayList<Control>(1);
- controlList.add(new Control(OID_DISCONNECT_REQUEST, false,
- new ASN1OctetString(section)));
-
- return controlList;
- }
-
-
-
- /**
- * Creates a disconnect request LDAP control with the specified section.
- *
- * @param section The section to use for the disconnect.
- *
- * @return The appropriate disconnect request LDAP control.
- */
- public static LDAPControl createDisconnectLDAPControl(String section)
- {
- return new LDAPControl(OID_DISCONNECT_REQUEST, false,
- new ASN1OctetString(section));
- }
-
-
-
- /**
- * Retrieves a list containing a disconnect request LDAP control with the
- * specified section.
- *
- * @param section The section to use for the disconnect.
- *
- * @return A list containing the appropriate disconnect request LDAP control.
- */
- public static ArrayList<LDAPControl> createDisconnectLDAPControlList(
- String section)
- {
- ArrayList<LDAPControl> controlList = new ArrayList<LDAPControl>(1);
-
- controlList.add(new LDAPControl(OID_DISCONNECT_REQUEST, false,
- new ASN1OctetString(section)));
+ controlList.add(new DisconnectClientControl(false, section));
return controlList;
}
--
Gitblit v1.10.0