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/src/server/org/opends/server/tools/LDAPReader.java |  109 ++++++++++++++++++++++++++++++++----------------------
 1 files changed, 65 insertions(+), 44 deletions(-)

diff --git a/opends/src/server/org/opends/server/tools/LDAPReader.java b/opends/src/server/org/opends/server/tools/LDAPReader.java
index 5730e30..761cd83 100644
--- a/opends/src/server/org/opends/server/tools/LDAPReader.java
+++ b/opends/src/server/org/opends/server/tools/LDAPReader.java
@@ -22,17 +22,21 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2008 Sun Microsystems, Inc.
+ *      Copyright 2009 Sun Microsystems, Inc.
  */
 
 package org.opends.server.tools;
 
-import org.opends.server.protocols.asn1.ASN1Reader;
-import org.opends.server.protocols.asn1.ASN1Element;
-import org.opends.server.protocols.asn1.ASN1Exception;
-import org.opends.server.protocols.asn1.ASN1Sequence;
+import org.opends.server.protocols.asn1.*;
 import org.opends.server.protocols.ldap.LDAPMessage;
 import org.opends.server.types.LDAPException;
+import org.opends.server.types.DebugLogLevel;
+import org.opends.server.types.RecordingInputStream;
+import org.opends.server.types.ByteString;
+import static org.opends.server.loggers.debug.DebugLogger.debugEnabled;
+import static org.opends.server.loggers.debug.DebugLogger.getTracer;
+import org.opends.server.loggers.debug.DebugTracer;
+import org.opends.server.util.ServerConstants;
 
 import java.io.IOException;
 import java.net.Socket;
@@ -43,23 +47,14 @@
  */
 public class LDAPReader
 {
-  private ASN1Reader asn1Reader;
-  private VerboseTracer tracer;
-
   /**
-   * Creates a new LDAP reader that will read messages from the provided
-   * socket.
-   *
-   * @param  socket  The socket from which to read the LDAP messages.
-   *
-   * @throws  IOException  If a problem occurs while attempting to obtain an
-   *                       ASN.1 reader for the socket.
+   * The tracer object for the debug logger.
    */
-  public LDAPReader(Socket socket)
-       throws IOException
-  {
-    this(socket, null);
-  }
+  private static final DebugTracer TRACER = getTracer();
+
+  private Socket socket;
+  private ASN1Reader asn1Reader;
+  private RecordingInputStream debugInputStream;
 
   /**
    * Creates a new LDAP reader that will read messages from the provided
@@ -67,16 +62,15 @@
    *
    * @param  socket   The socket from which to read the LDAP messages.
    *
-   * @param  tracer   Specifies a tracer to be used for tracing messages read.
-   *
    * @throws  IOException  If a problem occurs while attempting to obtain an
    *                       input stream for the socket.
    */
-  public LDAPReader(Socket socket, VerboseTracer tracer)
+  public LDAPReader(Socket socket)
        throws IOException
   {
-    this.asn1Reader = new ASN1Reader(socket);
-    this.tracer = tracer;
+    this.socket = socket;
+    this.debugInputStream = new RecordingInputStream(socket.getInputStream());
+    this.asn1Reader = ASN1.getReader(debugInputStream);
   }
 
   /**
@@ -97,17 +91,31 @@
   public LDAPMessage readMessage()
        throws IOException, ASN1Exception, LDAPException
   {
-    ASN1Element element = asn1Reader.readElement();
-    if (element == null)
+    debugInputStream.setRecordingEnabled(debugEnabled());
+
+    if(!asn1Reader.hasNextElement())
     {
+      // EOF was reached...
       return null;
     }
 
-    ASN1Sequence sequence = ASN1Sequence.decodeAsSequence(element);
-    LDAPMessage message = LDAPMessage.decode(sequence);
-    if (tracer != null)
+    LDAPMessage message =
+        org.opends.server.protocols.ldap.LDAPReader.readMessage(asn1Reader);
+
+    if(debugInputStream.isRecordingEnabled())
     {
-      tracer.traceIncomingMessage(message, sequence);
+      ByteString bytesRead = debugInputStream.getRecordedBytes();
+      debugInputStream.clearRecordedBytes();
+
+      StringBuilder builder = new StringBuilder();
+      builder.append("bytes read from wire(len=");
+      builder.append(bytesRead.length());
+      builder.append("):");
+      builder.append(ServerConstants.EOL);
+      bytesRead.toHexPlusAscii(builder, 4);
+
+      TRACER.debugProtocolElement(DebugLogLevel.VERBOSE, builder.toString());
+      TRACER.debugProtocolElement(DebugLogLevel.VERBOSE, message.toString());
     }
 
     return message;
@@ -118,18 +126,31 @@
    */
   public void close()
   {
-    asn1Reader.close();
+    try
+    {
+      asn1Reader.close();
+    }
+    catch (Exception e)
+    {
+      if (debugEnabled())
+      {
+        TRACER.debugCaught(DebugLogLevel.ERROR, e);
+      }
+    }
+
+    if (socket != null)
+    {
+      try
+      {
+        socket.close();
+      }
+      catch (Exception e)
+      {
+        if (debugEnabled())
+        {
+          TRACER.debugCaught(DebugLogLevel.ERROR, e);
+        }
+      }
+    }
   }
-
-  /**
-   * Get the underlying ASN1 reader.
-   *
-   * @return  The underlying ASN1 reader.
-   */
-  public ASN1Reader getASN1Reader()
-  {
-    return asn1Reader;
-  }
-
-
 }

--
Gitblit v1.10.0