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/LDAPWriter.java | 103 +++++++++++++++++++++++++++++++++------------------
1 files changed, 66 insertions(+), 37 deletions(-)
diff --git a/opends/src/server/org/opends/server/tools/LDAPWriter.java b/opends/src/server/org/opends/server/tools/LDAPWriter.java
index 7835bea..7293dfb 100644
--- a/opends/src/server/org/opends/server/tools/LDAPWriter.java
+++ b/opends/src/server/org/opends/server/tools/LDAPWriter.java
@@ -22,14 +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.ASN1Writer;
-import org.opends.server.protocols.asn1.ASN1Element;
+import org.opends.server.protocols.asn1.ASN1;
import org.opends.server.protocols.ldap.LDAPMessage;
+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.types.DebugLogLevel;
+import org.opends.server.types.RecordingOutputStream;
+import org.opends.server.types.ByteString;
+import org.opends.server.util.ServerConstants;
import java.net.Socket;
import java.io.IOException;
@@ -40,23 +47,14 @@
*/
public class LDAPWriter
{
- ASN1Writer asn1Writer;
- VerboseTracer tracer;
-
/**
- * Creates a new LDAP writer that will write messages to the provided
- * socket.
- *
- * @param socket The socket to use to write 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 LDAPWriter(Socket socket)
- throws IOException
- {
- this(socket, null);
- }
+ private static final DebugTracer TRACER = getTracer();
+
+ Socket socket;
+ ASN1Writer asn1Writer;
+ private RecordingOutputStream debugOutputStream;
/**
@@ -65,16 +63,16 @@
*
* @param socket The socket to use to write LDAP messages.
*
- * @param tracer Specifies a tracer to be used for tracing messages written.
- *
* @throws IOException If a problem occurs while attempting to obtain an
* output stream for the socket.
*/
- public LDAPWriter(Socket socket, VerboseTracer tracer)
+ public LDAPWriter(Socket socket)
throws IOException
{
- this.asn1Writer = new ASN1Writer(socket);
- this.tracer = tracer;
+ this.socket = socket;
+ this.debugOutputStream =
+ new RecordingOutputStream(socket.getOutputStream());
+ this.asn1Writer = ASN1.getWriter(debugOutputStream);
}
/**
@@ -88,12 +86,28 @@
public void writeMessage(LDAPMessage message)
throws IOException
{
- ASN1Element element = message.encode();
- if (tracer != null)
+ if(debugEnabled())
{
- tracer.traceOutgoingMessage(message, element);
+ TRACER.debugProtocolElement(DebugLogLevel.VERBOSE, message.toString());
+ debugOutputStream.setRecordingEnabled(true);
}
- asn1Writer.writeElement(element);
+
+ message.write(asn1Writer);
+
+ if(debugOutputStream.isRecordingEnabled())
+ {
+ ByteString bytesRead = debugOutputStream.getRecordedBytes();
+ debugOutputStream.clearRecordedBytes();
+
+ StringBuilder builder = new StringBuilder();
+ builder.append("bytes written to wire(len=");
+ builder.append(bytesRead.length());
+ builder.append("):");
+ builder.append(ServerConstants.EOL);
+ bytesRead.toHexPlusAscii(builder, 4);
+
+ TRACER.debugProtocolElement(DebugLogLevel.VERBOSE, builder.toString());
+ }
}
/**
@@ -101,17 +115,32 @@
*/
public void close()
{
- asn1Writer.close();
- }
+ try
+ {
+ asn1Writer.close();
+ }
+ catch (Exception e)
+ {
+ if (debugEnabled())
+ {
+ TRACER.debugCaught(DebugLogLevel.ERROR, e);
+ }
+ }
- /**
- * Get the underlying ASN1 writer.
- *
- * @return The underlying ASN1 writer.
- */
- public ASN1Writer getASN1Writer()
- {
- return asn1Writer;
- }
+ if (socket != null)
+ {
+ try
+ {
+ socket.close();
+ }
+ catch (Exception e)
+ {
+ if (debugEnabled())
+ {
+ TRACER.debugCaught(DebugLogLevel.ERROR, e);
+ }
+ }
+ }
+ }
}
--
Gitblit v1.10.0