Author: olegk
Date: Sun Oct 11 11:26:16 2009
New Revision: 824053

URL: http://svn.apache.org/viewvc?rev=824053&view=rev
Log:
More reliable HTTP header logging and additional option for a full wire logging 
(everything that gets written to and read from the underlying socket)

Added:
    
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpClientConnection.java
   (with props)
    
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpServerConnection.java
   (with props)
    
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/Wire.java
   (with props)
Removed:
    
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpClientIOTarget.java
    
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpServerIOTarget.java
Modified:
    
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingIOSession.java
    
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpClientHandler.java
    
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpServiceHandler.java
    
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingUtils.java
    
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/PlainClientIOEventDispatch.java
    
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/PlainServerIOEventDispatch.java
    
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/SSLClientIOEventDispatch.java
    
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/SSLServerIOEventDispatch.java

Modified: 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingIOSession.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingIOSession.java?rev=824053&r1=824052&r2=824053&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingIOSession.java
 (original)
+++ 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingIOSession.java
 Sun Oct 11 11:26:16 2009
@@ -34,16 +34,21 @@
  * Decorator class intended to transparently extend an {...@link IOSession} 
  * with basic event logging capabilities using Commons Logging. 
  */
-public class LoggingIOSession implements IOSession {
+class LoggingIOSession implements IOSession {
 
     private static AtomicLong COUNT = new AtomicLong(0);
     
     private final Log log;
+    private final Wire wirelog;
     private final IOSession session;
     private final ByteChannel channel;
     private final String id;
     
-    public LoggingIOSession(final Log log, final IOSession session, final 
String id) {
+    public LoggingIOSession(
+            final Log log, 
+            final Log wirelog, 
+            final IOSession session, 
+            final String id) {
         super();
         if (session == null) {
             throw new IllegalArgumentException("I/O session may not be null");
@@ -51,11 +56,8 @@
         this.session = session;
         this.channel = new LoggingByteChannel();
         this.id = id + "-" + COUNT.incrementAndGet();
-        if (log != null) {
-            this.log = log;
-        } else {
-            this.log = LogFactory.getLog(session.getClass());
-        }
+        this.log = LogFactory.getLog(session.getClass());
+        this.wirelog = new Wire(wirelog);
     }
 
     public int getStatus() {
@@ -190,6 +192,13 @@
             if (log.isDebugEnabled()) {
                 log.debug("I/O session " + id + " " + session + ": " + 
bytesRead + " bytes read");
             }
+            if (bytesRead > 0 && wirelog.isEnabled()) {
+                ByteBuffer b = dst.duplicate();
+                int p = b.position();
+                b.limit(p);
+                b.position(p - bytesRead);
+                wirelog.input(b);
+            }
             return bytesRead;
         }
 
@@ -198,6 +207,13 @@
             if (log.isDebugEnabled()) {
                 log.debug("I/O session " + id + " " + session + ": " + 
byteWritten + " bytes written");
             }
+            if (byteWritten > 0 && wirelog.isEnabled()) {
+                ByteBuffer b = src.duplicate();
+                int p = b.position();
+                b.limit(p);
+                b.position(p - byteWritten);
+                wirelog.output(b);
+            }
             return byteWritten;
         }
 

Added: 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpClientConnection.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpClientConnection.java?rev=824053&view=auto
==============================================================================
--- 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpClientConnection.java
 (added)
+++ 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpClientConnection.java
 Sun Oct 11 11:26:16 2009
@@ -0,0 +1,166 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.synapse.transport.nhttp;
+
+import java.io.IOException;
+import java.nio.channels.ReadableByteChannel;
+
+import org.apache.commons.logging.Log;
+import org.apache.http.Header;
+import org.apache.http.HttpException;
+import org.apache.http.HttpMessage;
+import org.apache.http.HttpRequest;
+import org.apache.http.HttpResponse;
+import org.apache.http.HttpResponseFactory;
+import org.apache.http.impl.nio.DefaultNHttpClientConnection;
+import org.apache.http.nio.NHttpClientHandler;
+import org.apache.http.nio.NHttpMessageParser;
+import org.apache.http.nio.NHttpMessageWriter;
+import org.apache.http.nio.reactor.IOSession;
+import org.apache.http.nio.reactor.SessionInputBuffer;
+import org.apache.http.nio.reactor.SessionOutputBuffer;
+import org.apache.http.nio.util.ByteBufferAllocator;
+import org.apache.http.params.HttpParams;
+
+class LoggingNHttpClientConnection extends DefaultNHttpClientConnection {
+
+    private final Log log;
+    private final Log headerlog;
+
+    public LoggingNHttpClientConnection(
+            final Log log,
+            final Log headerlog,
+            final IOSession iosession,
+            final HttpResponseFactory responseFactory,
+            final ByteBufferAllocator allocator,
+            final HttpParams params) {
+        super(iosession, responseFactory, allocator, params);
+        this.log = log;
+        this.headerlog = headerlog;
+    }
+
+    @Override
+    public void close() throws IOException {
+        this.log.debug("Close connection");        
+        super.close();
+    }
+
+    @Override
+    public void shutdown() throws IOException {
+        this.log.debug("Shutdown connection");        
+        super.shutdown();
+    }
+
+    @Override
+    public void submitRequest(final HttpRequest request) throws IOException, 
HttpException {
+        if (this.log.isDebugEnabled()) {
+            this.log.debug("HTTP connection " + this + ": "  + 
request.getRequestLine().toString());
+        }
+        super.submitRequest(request);
+    }
+
+    @Override
+    public void consumeInput(final NHttpClientHandler handler) {
+        this.log.debug("Consume input");        
+        super.consumeInput(handler);
+    }
+
+    @Override
+    public void produceOutput(final NHttpClientHandler handler) {
+        this.log.debug("Produce output");        
+        super.produceOutput(handler);
+    }
+
+    @Override
+    protected NHttpMessageWriter createRequestWriter(
+            final SessionOutputBuffer buffer, 
+            final HttpParams params) {
+        return new LoggingNHttpMessageWriter(
+                super.createRequestWriter(buffer, params));
+    }
+
+    @Override
+    protected NHttpMessageParser createResponseParser(
+            final SessionInputBuffer buffer, 
+            final HttpResponseFactory responseFactory,
+            final HttpParams params) {
+        return new LoggingNHttpMessageParser(
+                super.createResponseParser(buffer, responseFactory, params));
+    }
+
+    class LoggingNHttpMessageWriter implements NHttpMessageWriter {
+
+        private final NHttpMessageWriter writer;
+        
+        public LoggingNHttpMessageWriter(final NHttpMessageWriter writer) {
+            super();
+            this.writer = writer;
+        }
+        
+        public void reset() {
+            this.writer.reset();
+        }
+
+        public void write(final HttpMessage message) throws IOException, 
HttpException {
+            if (message != null && headerlog.isDebugEnabled()) {
+                HttpRequest request = (HttpRequest) message; 
+                headerlog.debug(">> " + request.getRequestLine().toString());
+                Header[] headers = request.getAllHeaders();
+                for (int i = 0; i < headers.length; i++) {
+                    headerlog.debug(">> " + headers[i].toString());
+                }
+            }
+            this.writer.write(message);
+        }
+        
+    }
+    
+    class LoggingNHttpMessageParser implements NHttpMessageParser {
+
+        private final NHttpMessageParser parser;
+        
+        public LoggingNHttpMessageParser(final NHttpMessageParser parser) {
+            super();
+            this.parser = parser;
+        }
+        
+        public void reset() {
+            this.parser.reset();
+        }
+
+        public int fillBuffer(final ReadableByteChannel channel) throws 
IOException {
+            return this.parser.fillBuffer(channel);
+        }
+
+        public HttpMessage parse() throws IOException, HttpException {
+            HttpMessage message = this.parser.parse();
+            if (message != null && headerlog.isDebugEnabled()) {
+                HttpResponse response = (HttpResponse) message; 
+                headerlog.debug("<< " + response.getStatusLine().toString());
+                Header[] headers = response.getAllHeaders();
+                for (int i = 0; i < headers.length; i++) {
+                    headerlog.debug("<< " + headers[i].toString());
+                }
+            }
+            return message;
+        }
+        
+    }
+
+}

Propchange: 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpClientConnection.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpClientConnection.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpClientConnection.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpClientHandler.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpClientHandler.java?rev=824053&r1=824052&r2=824053&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpClientHandler.java
 (original)
+++ 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpClientHandler.java
 Sun Oct 11 11:26:16 2009
@@ -22,7 +22,6 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.http.Header;
 import org.apache.http.HttpException;
 import org.apache.http.HttpResponse;
 import org.apache.http.nio.ContentDecoder;
@@ -34,31 +33,20 @@
  * Decorator class intended to transparently extend an {...@link 
NHttpClientHandler}
  * with basic event logging capabilities using Commons Logging. 
  */
-public class LoggingNHttpClientHandler implements NHttpClientHandler {
+class LoggingNHttpClientHandler implements NHttpClientHandler {
 
     private final Log log;
-    private final Log headerlog;
     private final NHttpClientHandler handler;
     
     public LoggingNHttpClientHandler(
             final Log log, 
-            final Log headerlog, 
             final NHttpClientHandler handler) {
         super();
         if (handler == null) {
             throw new IllegalArgumentException("HTTP client handler may not be 
null");
         }
         this.handler = handler;
-        if (log != null) {
-            this.log = log;
-        } else {
-            this.log = LogFactory.getLog(handler.getClass());
-        }
-        if (log != null) {
-            this.headerlog = headerlog;
-        } else {
-            this.headerlog = LogFactory.getLog(LoggingUtils.HEADER_LOG_ID);
-        }
+        this.log = LogFactory.getLog(handler.getClass());
     }
     
     public void connected(final NHttpClientConnection conn, final Object 
attachment) {
@@ -109,13 +97,6 @@
                     + response.getStatusLine() + getRequestMessageID(conn));
         }
         this.handler.responseReceived(conn);
-        if (this.headerlog.isDebugEnabled()) {
-            this.headerlog.debug("<< " + response.getStatusLine().toString());
-            Header[] headers = response.getAllHeaders();
-            for (int i = 0; i < headers.length; i++) {
-                this.headerlog.debug("<< " + headers[i].toString());
-            }
-        }
     }
 
     public void inputReady(final NHttpClientConnection conn, final 
ContentDecoder decoder) {

Added: 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpServerConnection.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpServerConnection.java?rev=824053&view=auto
==============================================================================
--- 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpServerConnection.java
 (added)
+++ 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpServerConnection.java
 Sun Oct 11 11:26:16 2009
@@ -0,0 +1,166 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.synapse.transport.nhttp;
+
+import java.io.IOException;
+import java.nio.channels.ReadableByteChannel;
+
+import org.apache.commons.logging.Log;
+import org.apache.http.Header;
+import org.apache.http.HttpException;
+import org.apache.http.HttpMessage;
+import org.apache.http.HttpRequest;
+import org.apache.http.HttpRequestFactory;
+import org.apache.http.HttpResponse;
+import org.apache.http.impl.nio.DefaultNHttpServerConnection;
+import org.apache.http.nio.NHttpMessageParser;
+import org.apache.http.nio.NHttpMessageWriter;
+import org.apache.http.nio.NHttpServiceHandler;
+import org.apache.http.nio.reactor.IOSession;
+import org.apache.http.nio.reactor.SessionInputBuffer;
+import org.apache.http.nio.reactor.SessionOutputBuffer;
+import org.apache.http.nio.util.ByteBufferAllocator;
+import org.apache.http.params.HttpParams;
+
+class LoggingNHttpServerConnection extends DefaultNHttpServerConnection {
+
+    private final Log log;
+    private final Log headerlog;
+    
+    public LoggingNHttpServerConnection(
+            final Log log,
+            final Log headerlog,
+            final IOSession session,
+            final HttpRequestFactory requestFactory,
+            final ByteBufferAllocator allocator,
+            final HttpParams params) {
+        super(session, requestFactory, allocator, params);
+        this.log = log;
+        this.headerlog = headerlog;
+    }
+
+    @Override
+    public void close() throws IOException {
+        this.log.debug("Close connection");        
+        super.close();
+    }
+
+    @Override
+    public void shutdown() throws IOException {
+        this.log.debug("Shutdown connection");        
+        super.shutdown();
+    }
+    
+    @Override
+    public void submitResponse(final HttpResponse response) throws 
IOException, HttpException {
+        if (this.log.isDebugEnabled()) {
+            this.log.debug("HTTP connection " + this + ": "  + 
response.getStatusLine().toString());
+        }
+        super.submitResponse(response);
+    }
+
+    @Override
+    public void consumeInput(final NHttpServiceHandler handler) {
+        this.log.debug("Consume input");        
+        super.consumeInput(handler);
+    }
+
+    @Override
+    public void produceOutput(final NHttpServiceHandler handler) {
+        this.log.debug("Produce output");        
+        super.produceOutput(handler);
+    }
+    
+    @Override
+    protected NHttpMessageWriter createResponseWriter(
+            final SessionOutputBuffer buffer, 
+            final HttpParams params) {
+        return new LoggingNHttpMessageWriter(
+                super.createResponseWriter(buffer, params));
+    }
+
+    @Override
+    protected NHttpMessageParser createRequestParser(
+            final SessionInputBuffer buffer, 
+            final HttpRequestFactory requestFactory,
+            final HttpParams params) {
+        return new LoggingNHttpMessageParser(
+                super.createRequestParser(buffer, requestFactory, params));
+    }
+
+    class LoggingNHttpMessageWriter implements NHttpMessageWriter {
+
+        private final NHttpMessageWriter writer;
+        
+        public LoggingNHttpMessageWriter(final NHttpMessageWriter writer) {
+            super();
+            this.writer = writer;
+        }
+        
+        public void reset() {
+            this.writer.reset();
+        }
+
+        public void write(final HttpMessage message) throws IOException, 
HttpException {
+            if (message != null && headerlog.isDebugEnabled()) {
+                HttpResponse response = (HttpResponse) message; 
+                headerlog.debug("<< " + response.getStatusLine().toString());
+                Header[] headers = response.getAllHeaders();
+                for (int i = 0; i < headers.length; i++) {
+                    headerlog.debug("<< " + headers[i].toString());
+                }
+            }
+            this.writer.write(message);
+        }
+        
+    }
+    
+    class LoggingNHttpMessageParser implements NHttpMessageParser {
+
+        private final NHttpMessageParser parser;
+        
+        public LoggingNHttpMessageParser(final NHttpMessageParser parser) {
+            super();
+            this.parser = parser;
+        }
+        
+        public void reset() {
+            this.parser.reset();
+        }
+
+        public int fillBuffer(final ReadableByteChannel channel) throws 
IOException {
+            return this.parser.fillBuffer(channel);
+        }
+
+        public HttpMessage parse() throws IOException, HttpException {
+            HttpMessage message = this.parser.parse();
+            if (message != null && headerlog.isDebugEnabled()) {
+                HttpRequest request = (HttpRequest) message; 
+                headerlog.debug(">> " + request.getRequestLine().toString());
+                Header[] headers = request.getAllHeaders();
+                for (int i = 0; i < headers.length; i++) {
+                    headerlog.debug(">> " + headers[i].toString());
+                }
+            }
+            return message;
+        }
+        
+    }
+
+}
\ No newline at end of file

Propchange: 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpServerConnection.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpServerConnection.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpServerConnection.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpServiceHandler.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpServiceHandler.java?rev=824053&r1=824052&r2=824053&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpServiceHandler.java
 (original)
+++ 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingNHttpServiceHandler.java
 Sun Oct 11 11:26:16 2009
@@ -22,7 +22,6 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.http.Header;
 import org.apache.http.HttpException;
 import org.apache.http.HttpRequest;
 import org.apache.http.ConnectionClosedException;
@@ -35,31 +34,20 @@
  * Decorator class intended to transparently extend an {...@link 
NHttpServiceHandler} 
  * with basic event logging capabilities using Commons Logging. 
  */
-public class LoggingNHttpServiceHandler implements NHttpServiceHandler {
+class LoggingNHttpServiceHandler implements NHttpServiceHandler {
 
     private final Log log;
-    private final Log headerlog;
     private final NHttpServiceHandler handler;
     
     public LoggingNHttpServiceHandler(
             final Log log, 
-            final Log headerlog, 
             final NHttpServiceHandler handler) {
         super();
         if (handler == null) {
             throw new IllegalArgumentException("HTTP service handler may not 
be null");
         }
         this.handler = handler;
-        if (log != null) {
-            this.log = log;
-        } else {
-            this.log = LogFactory.getLog(handler.getClass());
-        }
-        if (log != null) {
-            this.headerlog = headerlog;
-        } else {
-            this.headerlog = LogFactory.getLog(LoggingUtils.HEADER_LOG_ID);
-        }
+        this.log = LogFactory.getLog(handler.getClass());
     }
     
     public void connected(final NHttpServerConnection conn) {
@@ -101,13 +89,6 @@
             this.log.debug("HTTP connection " + conn + ": " + 
request.getRequestLine());
         }
         this.handler.requestReceived(conn);
-        if (this.headerlog.isDebugEnabled()) {
-            this.headerlog.debug(">> " + request.getRequestLine().toString());
-            Header[] headers = request.getAllHeaders();
-            for (int i = 0; i < headers.length; i++) {
-                this.headerlog.debug(">> " + headers[i].toString());
-            }
-        }
     }
 
     public void outputReady(final NHttpServerConnection conn, final 
ContentEncoder encoder) {

Modified: 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingUtils.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingUtils.java?rev=824053&r1=824052&r2=824053&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingUtils.java
 (original)
+++ 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/LoggingUtils.java
 Sun Oct 11 11:26:16 2009
@@ -21,58 +21,94 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.http.HttpRequestFactory;
+import org.apache.http.HttpResponseFactory;
+import org.apache.http.impl.nio.DefaultNHttpClientConnection;
+import org.apache.http.impl.nio.DefaultNHttpServerConnection;
 import org.apache.http.nio.NHttpClientHandler;
 import org.apache.http.nio.NHttpClientIOTarget;
 import org.apache.http.nio.NHttpServerIOTarget;
 import org.apache.http.nio.NHttpServiceHandler;
 import org.apache.http.nio.reactor.IOSession;
+import org.apache.http.nio.util.ByteBufferAllocator;
+import org.apache.http.params.HttpParams;
 
-public class LoggingUtils {
+class LoggingUtils {
     
     public final static String HEADER_LOG_ID = 
"org.apache.synapse.transport.nhttp.headers"; 
+    public final static String WIRE_LOG_ID = 
"org.apache.synapse.transport.nhttp.wire"; 
 
     public static IOSession decorate(IOSession session, final String id) {
         Log log = LogFactory.getLog(session.getClass());
-        if (log.isDebugEnabled()) {
-            session = new LoggingIOSession(log, session, id);
+        Log wirelog = LogFactory.getLog(WIRE_LOG_ID);
+        if (wirelog.isDebugEnabled() || log.isDebugEnabled()) {
+            session = new LoggingIOSession(log, wirelog, session, id);
         }
         return session;
     }
     
-    public static NHttpClientIOTarget decorate(NHttpClientIOTarget target) {
-        Log log = LogFactory.getLog(target.getClass());
-        Log headerlog = LogFactory.getLog(HEADER_LOG_ID);
-        if (log.isDebugEnabled() || headerlog.isDebugEnabled()) {
-            target = new LoggingNHttpClientIOTarget(log, headerlog, target);
-        }
-        return target;
-    }
-
-    public static NHttpServerIOTarget decorate(NHttpServerIOTarget target) {
-        Log log = LogFactory.getLog(target.getClass());
-        Log headerlog = LogFactory.getLog(HEADER_LOG_ID);
-        if (log.isDebugEnabled() || headerlog.isDebugEnabled()) {
-            target = new LoggingNHttpServerIOTarget(log, headerlog, target);
-        }
-        return target;
-    }
-
     public static NHttpClientHandler decorate(NHttpClientHandler handler) {
         Log log = LogFactory.getLog(handler.getClass());
-        Log headerlog = LogFactory.getLog(HEADER_LOG_ID);
-        if (log.isDebugEnabled() || headerlog.isDebugEnabled()) {
-            handler = new LoggingNHttpClientHandler(log, headerlog, handler);
+        if (log.isDebugEnabled()) {
+            handler = new LoggingNHttpClientHandler(log, handler);
         }
         return handler;
     }
 
     public static NHttpServiceHandler decorate(NHttpServiceHandler handler) {
         Log log = LogFactory.getLog(handler.getClass());
-        Log headerlog = LogFactory.getLog(HEADER_LOG_ID);
-        if (log.isDebugEnabled() || headerlog.isDebugEnabled()) {
-            handler = new LoggingNHttpServiceHandler(log, headerlog, handler);
+        if (log.isDebugEnabled()) {
+            handler = new LoggingNHttpServiceHandler(log, handler);
         }
         return handler;
     }
 
+    public static NHttpClientIOTarget createClientConnection(
+            final IOSession iosession,
+            final HttpResponseFactory responseFactory,
+            final ByteBufferAllocator allocator,
+            final HttpParams params) {
+        Log log = LogFactory.getLog(DefaultNHttpClientConnection.class);
+        Log headerlog = LogFactory.getLog(HEADER_LOG_ID);        
+        if (headerlog.isDebugEnabled() || log.isDebugEnabled()) {
+            return new LoggingNHttpClientConnection(
+                    log, 
+                    headerlog, 
+                    iosession, 
+                    responseFactory,
+                    allocator,
+                    params);
+        } else {
+            return new DefaultNHttpClientConnection(
+                    iosession, 
+                    responseFactory,
+                    allocator,
+                    params);
+        }
+    }
+
+    public static NHttpServerIOTarget createServerConnection(
+            final IOSession iosession,
+            final HttpRequestFactory requestFactory,
+            final ByteBufferAllocator allocator,
+            final HttpParams params) {
+        Log log = LogFactory.getLog(DefaultNHttpClientConnection.class);
+        Log headerlog = LogFactory.getLog(HEADER_LOG_ID);        
+        if (headerlog.isDebugEnabled() || log.isDebugEnabled()) {
+            return new LoggingNHttpServerConnection(
+                    log, 
+                    headerlog, 
+                    iosession, 
+                    requestFactory,
+                    allocator,
+                    params);
+        } else {
+            return new DefaultNHttpServerConnection(
+                    iosession, 
+                    requestFactory,
+                    allocator,
+                    params);
+        }
+    }
+    
 }
\ No newline at end of file

Modified: 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/PlainClientIOEventDispatch.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/PlainClientIOEventDispatch.java?rev=824053&r1=824052&r2=824053&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/PlainClientIOEventDispatch.java
 (original)
+++ 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/PlainClientIOEventDispatch.java
 Sun Oct 11 11:26:16 2009
@@ -32,8 +32,12 @@
     
     @Override
     protected NHttpClientIOTarget createConnection(IOSession session) {
-        return LoggingUtils.decorate(
-                super.createConnection(LoggingUtils.decorate(session, 
"client")));
+        session = LoggingUtils.decorate(session, "client");
+        return LoggingUtils.createClientConnection(
+                session, 
+                createHttpResponseFactory(), 
+                this.allocator, 
+                this.params);
     }
     
 }

Modified: 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/PlainServerIOEventDispatch.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/PlainServerIOEventDispatch.java?rev=824053&r1=824052&r2=824053&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/PlainServerIOEventDispatch.java
 (original)
+++ 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/PlainServerIOEventDispatch.java
 Sun Oct 11 11:26:16 2009
@@ -31,9 +31,13 @@
     }
     
     @Override
-    protected NHttpServerIOTarget createConnection(final IOSession session) {
-        return LoggingUtils.decorate(
-                super.createConnection(LoggingUtils.decorate(session, 
"server")));
+    protected NHttpServerIOTarget createConnection(IOSession session) {
+        session = LoggingUtils.decorate(session, "server");
+        return LoggingUtils.createServerConnection(
+                session, 
+                createHttpRequestFactory(), 
+                this.allocator, 
+                this.params);
     }
     
 }

Modified: 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/SSLClientIOEventDispatch.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/SSLClientIOEventDispatch.java?rev=824053&r1=824052&r2=824053&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/SSLClientIOEventDispatch.java
 (original)
+++ 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/SSLClientIOEventDispatch.java
 Sun Oct 11 11:26:16 2009
@@ -71,8 +71,12 @@
     }
 
     protected NHttpClientIOTarget createConnection(IOSession session) {
-        return LoggingUtils.decorate(
-                super.createConnection(LoggingUtils.decorate(session, 
"sslclient")));
+        session = LoggingUtils.decorate(session, "sslclient");
+        return LoggingUtils.createClientConnection(
+                session, 
+                createHttpResponseFactory(), 
+                createByteBufferAllocator(), 
+                this.params);
     }
 
 }

Modified: 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/SSLServerIOEventDispatch.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/SSLServerIOEventDispatch.java?rev=824053&r1=824052&r2=824053&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/SSLServerIOEventDispatch.java
 (original)
+++ 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/SSLServerIOEventDispatch.java
 Sun Oct 11 11:26:16 2009
@@ -45,9 +45,13 @@
     }
     
     @Override
-    protected NHttpServerIOTarget createConnection(final IOSession session) {
-        return LoggingUtils.decorate(
-                super.createConnection(LoggingUtils.decorate(session, 
"sslserver")));
+    protected NHttpServerIOTarget createConnection(IOSession session) {
+        session = LoggingUtils.decorate(session, "sslserver");
+        return LoggingUtils.createServerConnection(
+                session, 
+                createHttpRequestFactory(), 
+                createByteBufferAllocator(), 
+                this.params);
     }
     
 }

Added: 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/Wire.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/Wire.java?rev=824053&view=auto
==============================================================================
--- 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/Wire.java
 (added)
+++ 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/Wire.java
 Sun Oct 11 11:26:16 2009
@@ -0,0 +1,111 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.synapse.transport.nhttp;
+
+import java.nio.ByteBuffer;
+
+import org.apache.commons.logging.Log;
+
+class Wire {
+
+    private final Log log;
+    
+    public Wire(final Log log) {
+        super();
+        this.log = log;
+    }
+    
+    private void wire(final String header, final byte[] b, int pos, int off) {
+        StringBuilder buffer = new StringBuilder();
+        for (int i = 0; i < off; i++) {
+            int ch = b[pos + i];
+            if (ch == 13) {
+                buffer.append("[\\r]");
+            } else if (ch == 10) {
+                    buffer.append("[\\n]\"");
+                    buffer.insert(0, "\"");
+                    buffer.insert(0, header);
+                    this.log.debug(buffer.toString());
+                    buffer.setLength(0);
+            } else if ((ch < 32) || (ch > 127)) {
+                buffer.append("[0x");
+                buffer.append(Integer.toHexString(ch));
+                buffer.append("]");
+            } else {
+                buffer.append((char) ch);
+            }
+        } 
+        if (buffer.length() > 0) {
+            buffer.append('\"');
+            buffer.insert(0, '\"');
+            buffer.insert(0, header);
+            this.log.debug(buffer.toString());
+        }
+    }
+
+
+    public boolean isEnabled() {
+        return this.log.isDebugEnabled();
+    }    
+    
+    public void output(final byte[] b, int pos, int off) {
+        wire("<< ", b, pos, off);
+    }
+
+    public void input(final byte[] b, int pos, int off) {
+        wire(">> ", b, pos, off);
+    }
+
+    public void output(byte[] b) {
+        output(b, 0, b.length);
+    }
+
+    public void input(byte[] b) {
+        input(b, 0, b.length);
+    }
+
+    public void output(int b) {
+        output(new byte[] {(byte) b});
+    }
+
+    public void input(int b) {
+        input(new byte[] {(byte) b});
+    }
+
+    public void output(final ByteBuffer b) {
+        if (b.hasArray()) {
+            output(b.array(), b.arrayOffset() + b.position(), b.remaining());
+        } else {
+            byte[] tmp = new byte[b.remaining()];
+            b.get(tmp);
+            output(tmp);
+        }
+    }
+
+    public void input(final ByteBuffer b) {
+        if (b.hasArray()) {
+            input(b.array(), b.arrayOffset() + b.position(), b.remaining());
+        } else {
+            byte[] tmp = new byte[b.remaining()];
+            b.get(tmp);
+            input(tmp);
+        }
+    }
+
+}

Propchange: 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/Wire.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/Wire.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: 
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/Wire.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain


Reply via email to