You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2011/08/30 17:16:47 UTC

svn commit: r1163256 [2/2] - in /httpcomponents/httpcore/trunk: ./ httpcore-contrib/ httpcore-nio/ httpcore-nio/src/main/java/org/apache/http/nio/protocol/ httpcore-nio/src/test/java/org/apache/http/nio/protocol/ httpcore-nio/src/test/java/org/apache/h...

Propchange: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/NHttpEntityWrapper.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/NHttpEntityWrapper.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/NHttpEntityWrapper.java
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Tue Aug 30 15:16:46 2011
@@ -0,0 +1 @@
+/httpcomponents/httpasyncclient/branches/conn-mgmt-redesign/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/NHttpEntityWrapper.java:1155312-1159070

Propchange: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/NHttpEntityWrapper.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/NullRequestConsumer.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/NullRequestConsumer.java?rev=1163256&view=auto
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/NullRequestConsumer.java (added)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/NullRequestConsumer.java Tue Aug 30 15:16:46 2011
@@ -0,0 +1,76 @@
+/*
+ * ====================================================================
+ * 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.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation.  For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ *
+ */
+
+package org.apache.http.nio.protocol;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+
+import org.apache.http.HttpRequest;
+import org.apache.http.nio.ContentDecoder;
+import org.apache.http.nio.IOControl;
+import org.apache.http.protocol.HttpContext;
+
+class NullRequestConsumer implements HttpAsyncRequestConsumer<Object> {
+
+    private final ByteBuffer buffer;
+
+    NullRequestConsumer() {
+        super();
+        this.buffer = ByteBuffer.allocate(2048);
+    }
+
+    public void requestReceived(final HttpRequest request) {
+    }
+
+    public void consumeContent(
+            final ContentDecoder decoder, final IOControl ioctrl) throws IOException {
+        int lastRead;
+        do {
+            this.buffer.clear();
+            lastRead = decoder.read(this.buffer);
+        } while (lastRead > 0);
+    }
+
+    public void requestCompleted(final HttpContext context) {
+    }
+
+    public void failed(final Exception ex) {
+    }
+
+    public Object getResult() {
+        return Boolean.TRUE;
+    }
+
+    public Exception getException() {
+        return null;
+    }
+
+    public void close() throws IOException {
+    }
+
+}
\ No newline at end of file

Propchange: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/NullRequestConsumer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/NullRequestConsumer.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/NullRequestConsumer.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/NullRequestHandler.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/NullRequestHandler.java?rev=1163256&view=auto
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/NullRequestHandler.java (added)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/NullRequestHandler.java Tue Aug 30 15:16:46 2011
@@ -0,0 +1,56 @@
+/*
+ * ====================================================================
+ * 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.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation.  For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ *
+ */
+
+package org.apache.http.nio.protocol;
+
+import org.apache.http.HttpRequest;
+import org.apache.http.HttpStatus;
+import org.apache.http.HttpVersion;
+import org.apache.http.nio.entity.NStringEntity;
+import org.apache.http.protocol.HttpContext;
+
+class NullRequestHandler implements HttpAsyncRequestHandler<Object> {
+
+    public NullRequestHandler() {
+        super();
+    }
+
+    public HttpAsyncRequestConsumer<Object> processRequest(
+            final HttpRequest request, final HttpContext context) {
+        return new NullRequestConsumer();
+    }
+
+    public void handle(
+            final Object obj,
+            final HttpAsyncResponseTrigger trigger,
+            final HttpContext context) {
+        trigger.submitResponse(new ErrorResponseProducer(
+                HttpVersion.HTTP_1_0, HttpStatus.SC_NOT_IMPLEMENTED,
+                NStringEntity.create("Service not implemented"), true));
+    }
+
+}

Propchange: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/NullRequestHandler.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/NullRequestHandler.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/NullRequestHandler.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestHttpAsyncHandlers.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestHttpAsyncHandlers.java?rev=1163256&view=auto
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestHttpAsyncHandlers.java (added)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestHttpAsyncHandlers.java Tue Aug 30 15:16:46 2011
@@ -0,0 +1,295 @@
+/*
+ * ====================================================================
+ * 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.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation.  For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ *
+ */
+
+package org.apache.http.nio.protocol;
+
+import java.io.UnsupportedEncodingException;
+import java.net.InetSocketAddress;
+import java.util.LinkedList;
+import java.util.Queue;
+import java.util.concurrent.ConcurrentLinkedQueue;
+
+import org.apache.http.HttpCoreNIOTestBase;
+import org.apache.http.HttpEntityEnclosingRequest;
+import org.apache.http.HttpRequest;
+import org.apache.http.HttpRequestInterceptor;
+import org.apache.http.HttpResponseInterceptor;
+import org.apache.http.HttpStatus;
+import org.apache.http.HttpVersion;
+import org.apache.http.impl.DefaultConnectionReuseStrategy;
+import org.apache.http.message.BasicHttpEntityEnclosingRequest;
+import org.apache.http.message.BasicHttpRequest;
+import org.apache.http.nio.entity.NStringEntity;
+import org.apache.http.nio.reactor.IOReactorStatus;
+import org.apache.http.nio.reactor.ListenerEndpoint;
+import org.apache.http.nio.reactor.SessionRequest;
+import org.apache.http.params.CoreProtocolPNames;
+import org.apache.http.protocol.HttpProcessor;
+import org.apache.http.protocol.ImmutableHttpProcessor;
+import org.apache.http.protocol.RequestConnControl;
+import org.apache.http.protocol.RequestContent;
+import org.apache.http.protocol.RequestExpectContinue;
+import org.apache.http.protocol.RequestTargetHost;
+import org.apache.http.protocol.RequestUserAgent;
+import org.apache.http.protocol.ResponseConnControl;
+import org.apache.http.protocol.ResponseContent;
+import org.apache.http.protocol.ResponseDate;
+import org.apache.http.protocol.ResponseServer;
+import org.apache.http.testserver.SimpleEventListener;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * HttpCore NIO integration tests for async handlers.
+ */
+public class TestHttpAsyncHandlers extends HttpCoreNIOTestBase {
+
+    static class BasicHttpAsyncRequestHandlerResolver implements HttpAsyncRequestHandlerResolver {
+
+        private final HttpAsyncRequestHandler<?> handler;
+
+        public BasicHttpAsyncRequestHandlerResolver(final HttpAsyncRequestHandler<?> handler) {
+            super();
+            this.handler = handler;
+        }
+
+        public HttpAsyncRequestHandler<?> lookup(String requestURI) {
+            return this.handler;
+        }
+
+    }
+
+    private void executeStandardTest(
+            final HttpAsyncRequestHandler<?> requestHandler,
+            final NHttpRequestExecutionHandler requestExecutionHandler) throws Exception {
+        int connNo = 3;
+        int reqNo = 20;
+        Job[] jobs = new Job[connNo * reqNo];
+        for (int i = 0; i < jobs.length; i++) {
+            jobs[i] = new Job();
+        }
+        Queue<Job> queue = new ConcurrentLinkedQueue<Job>();
+        for (int i = 0; i < jobs.length; i++) {
+            queue.add(jobs[i]);
+        }
+
+        HttpProcessor serverHttpProc = new ImmutableHttpProcessor(new HttpResponseInterceptor[] {
+                new ResponseDate(),
+                new ResponseServer(),
+                new ResponseContent(),
+                new ResponseConnControl()
+        });
+
+        HttpAsyncServiceHandler serviceHandler = new HttpAsyncServiceHandler(
+                new BasicHttpAsyncRequestHandlerResolver(requestHandler),
+                serverHttpProc,
+                new DefaultConnectionReuseStrategy(),
+                this.server.getParams());
+
+        HttpProcessor clientHttpProc = new ImmutableHttpProcessor(new HttpRequestInterceptor[] {
+                new RequestContent(),
+                new RequestTargetHost(),
+                new RequestConnControl(),
+                new RequestUserAgent(),
+                new RequestExpectContinue()});
+
+        AsyncNHttpClientHandler clientHandler = new AsyncNHttpClientHandler(
+                clientHttpProc,
+                requestExecutionHandler,
+                new DefaultConnectionReuseStrategy(),
+                this.client.getParams());
+
+        clientHandler.setEventListener(
+                new SimpleEventListener());
+
+        this.server.start(serviceHandler);
+        this.client.start(clientHandler);
+
+        ListenerEndpoint endpoint = this.server.getListenerEndpoint();
+        endpoint.waitFor();
+        InetSocketAddress serverAddress = (InetSocketAddress) endpoint.getAddress();
+
+        Assert.assertEquals("Test server status", IOReactorStatus.ACTIVE, this.server.getStatus());
+
+        Queue<SessionRequest> connRequests = new LinkedList<SessionRequest>();
+        for (int i = 0; i < connNo; i++) {
+            SessionRequest sessionRequest = this.client.openConnection(
+                    new InetSocketAddress("localhost", serverAddress.getPort()),
+                    queue);
+            connRequests.add(sessionRequest);
+        }
+
+        while (!connRequests.isEmpty()) {
+            SessionRequest sessionRequest = connRequests.remove();
+            sessionRequest.waitFor();
+            if (sessionRequest.getException() != null) {
+                throw sessionRequest.getException();
+            }
+            Assert.assertNotNull(sessionRequest.getSession());
+        }
+
+        Assert.assertEquals("Test client status", IOReactorStatus.ACTIVE, this.client.getStatus());
+
+        for (int i = 0; i < jobs.length; i++) {
+            Job testjob = jobs[i];
+            testjob.waitFor();
+            if (testjob.isSuccessful()) {
+                Assert.assertEquals(HttpStatus.SC_OK, testjob.getStatusCode());
+                Assert.assertEquals(testjob.getExpected(), testjob.getResult());
+            } else {
+                Assert.fail(testjob.getFailureMessage());
+            }
+        }
+    }
+
+    /**
+     * This test case executes a series of simple (non-pipelined) GET requests
+     * over multiple connections. This uses non-blocking output entities.
+     */
+    @Test
+    public void testHttpGets() throws Exception {
+        NHttpRequestExecutionHandler requestExecutionHandler = new RequestExecutionHandler() {
+
+            @Override
+            protected HttpRequest generateRequest(Job testjob) {
+                String s = testjob.getPattern() + "x" + testjob.getCount();
+                return new BasicHttpRequest("GET", s);
+            }
+
+        };
+        executeStandardTest(new BufferingAsyncRequestHandler(new RequestHandler()), requestExecutionHandler);
+    }
+
+    /**
+     * This test case executes a series of simple (non-pipelined) POST requests
+     * with content length delimited content over multiple connections.
+     * It uses purely asynchronous handlers.
+     */
+    @Test
+    public void testHttpPostsWithContentLength() throws Exception {
+        NHttpRequestExecutionHandler requestExecutionHandler = new RequestExecutionHandler() {
+
+            @Override
+            protected HttpRequest generateRequest(Job testjob) {
+                String s = testjob.getPattern() + "x" + testjob.getCount();
+                HttpEntityEnclosingRequest r = new BasicHttpEntityEnclosingRequest("POST", s);
+                NStringEntity entity = null;
+                try {
+                    entity = new NStringEntity(testjob.getExpected(), "US-ASCII");
+                    entity.setChunked(false);
+                } catch (UnsupportedEncodingException ignore) {
+                }
+                r.setEntity(entity);
+                return r;
+            }
+
+        };
+        executeStandardTest(new BufferingAsyncRequestHandler(new RequestHandler()), requestExecutionHandler);
+    }
+
+    /**
+     * This test case executes a series of simple (non-pipelined) POST requests
+     * with chunk coded content content over multiple connections.  This tests
+     * with nonblocking handlers & nonblocking entities.
+     */
+    @Test
+    public void testHttpPostsChunked() throws Exception {
+        NHttpRequestExecutionHandler requestExecutionHandler = new RequestExecutionHandler() {
+
+            @Override
+            protected HttpRequest generateRequest(Job testjob) {
+                String s = testjob.getPattern() + "x" + testjob.getCount();
+                HttpEntityEnclosingRequest r = new BasicHttpEntityEnclosingRequest("POST", s);
+                NStringEntity entity = null;
+                try {
+                    entity = new NStringEntity(testjob.getExpected(), "US-ASCII");
+                    entity.setChunked(true);
+                } catch (UnsupportedEncodingException ignore) {
+                }
+                r.setEntity(entity);
+                return r;
+            }
+
+        };
+        executeStandardTest(new BufferingAsyncRequestHandler(new RequestHandler()), requestExecutionHandler);
+    }
+
+    /**
+     * This test case executes a series of simple (non-pipelined) HTTP/1.0
+     * POST requests over multiple persistent connections. This tests with nonblocking
+     * handlers & entities.
+     */
+    @Test
+    public void testHttpPostsHTTP10() throws Exception {
+        NHttpRequestExecutionHandler requestExecutionHandler = new RequestExecutionHandler() {
+
+            @Override
+            protected HttpRequest generateRequest(Job testjob) {
+                String s = testjob.getPattern() + "x" + testjob.getCount();
+                HttpEntityEnclosingRequest r = new BasicHttpEntityEnclosingRequest("POST", s,
+                        HttpVersion.HTTP_1_0);
+                NStringEntity entity = null;
+                try {
+                    entity = new NStringEntity(testjob.getExpected(), "US-ASCII");
+                } catch (UnsupportedEncodingException ignore) {
+                }
+                r.setEntity(entity);
+                return r;
+            }
+
+        };
+        executeStandardTest(new BufferingAsyncRequestHandler(new RequestHandler()), requestExecutionHandler);
+    }
+
+    /**
+     * This test case executes a series of simple (non-pipelined) POST requests
+     * over multiple connections using the 'expect: continue' handshake.  This test
+     * uses nonblocking handlers & entities.
+     */
+    @Test
+    public void testHttpPostsWithExpectContinue() throws Exception {
+        NHttpRequestExecutionHandler requestExecutionHandler = new RequestExecutionHandler() {
+
+            @Override
+            protected HttpRequest generateRequest(Job testjob) {
+                String s = testjob.getPattern() + "x" + testjob.getCount();
+                HttpEntityEnclosingRequest r = new BasicHttpEntityEnclosingRequest("POST", s);
+                NStringEntity entity = null;
+                try {
+                    entity = new NStringEntity(testjob.getExpected(), "US-ASCII");
+                } catch (UnsupportedEncodingException ignore) {
+                }
+                r.setEntity(entity);
+                r.getParams().setBooleanParameter(CoreProtocolPNames.USE_EXPECT_CONTINUE, true);
+                return r;
+            }
+
+        };
+        executeStandardTest(new BufferingAsyncRequestHandler(new RequestHandler()), requestExecutionHandler);
+    }
+
+}

Propchange: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestHttpAsyncHandlers.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestHttpAsyncHandlers.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestHttpAsyncHandlers.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/HttpSSLServer.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/HttpSSLServer.java?rev=1163256&r1=1163255&r2=1163256&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/HttpSSLServer.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/HttpSSLServer.java Tue Aug 30 15:16:46 2011
@@ -41,10 +41,12 @@ import javax.net.ssl.SSLContext;
 import org.apache.http.impl.nio.reactor.DefaultListeningIOReactor;
 import org.apache.http.impl.nio.reactor.ExceptionEvent;
 import org.apache.http.impl.nio.ssl.SSLServerIOEventDispatch;
+import org.apache.http.nio.NHttpServerIOTarget;
 import org.apache.http.nio.NHttpServiceHandler;
 import org.apache.http.nio.reactor.IOEventDispatch;
 import org.apache.http.nio.reactor.IOReactorExceptionHandler;
 import org.apache.http.nio.reactor.IOReactorStatus;
+import org.apache.http.nio.reactor.IOSession;
 import org.apache.http.nio.reactor.ListenerEndpoint;
 import org.apache.http.params.HttpParams;
 
@@ -110,7 +112,18 @@ public class HttpSSLServer {
             final NHttpServiceHandler serviceHandler,
             final SSLContext sslcontext,
             final HttpParams params) {
-        return new SSLServerIOEventDispatch(serviceHandler, sslcontext, params);
+        return new SSLServerIOEventDispatch(serviceHandler, sslcontext, params) {
+
+            @Override
+            protected NHttpServerIOTarget createConnection(final IOSession session) {
+                return new LoggingNHttpServerConnection(
+                        session,
+                        createHttpRequestFactory(),
+                        createByteBufferAllocator(),
+                        params);
+            }
+
+        };
     }
 
     private void execute(final NHttpServiceHandler serviceHandler) throws IOException {

Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/HttpServerNio.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/HttpServerNio.java?rev=1163256&r1=1163255&r2=1163256&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/HttpServerNio.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/HttpServerNio.java Tue Aug 30 15:16:46 2011
@@ -34,10 +34,12 @@ import java.util.List;
 import org.apache.http.impl.nio.DefaultServerIOEventDispatch;
 import org.apache.http.impl.nio.reactor.DefaultListeningIOReactor;
 import org.apache.http.impl.nio.reactor.ExceptionEvent;
+import org.apache.http.nio.NHttpServerIOTarget;
 import org.apache.http.nio.NHttpServiceHandler;
 import org.apache.http.nio.reactor.IOEventDispatch;
 import org.apache.http.nio.reactor.IOReactorExceptionHandler;
 import org.apache.http.nio.reactor.IOReactorStatus;
+import org.apache.http.nio.reactor.IOSession;
 import org.apache.http.nio.reactor.ListenerEndpoint;
 import org.apache.http.params.HttpParams;
 
@@ -69,7 +71,18 @@ public class HttpServerNio {
 
     protected IOEventDispatch createIOEventDispatch(
             final NHttpServiceHandler serviceHandler, final HttpParams params) {
-        return new DefaultServerIOEventDispatch(serviceHandler, params);
+        return new DefaultServerIOEventDispatch(serviceHandler, params) {
+
+            @Override
+            protected NHttpServerIOTarget createConnection(final IOSession session) {
+                return new LoggingNHttpServerConnection(
+                        session,
+                        createHttpRequestFactory(),
+                        createByteBufferAllocator(),
+                        params);
+            }
+
+        };
     }
 
     private void execute(final NHttpServiceHandler serviceHandler) throws IOException {

Copied: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/LoggingIOSession.java (from r1163243, httpcomponents/httpcore/trunk/httpcore-contrib/src/main/java/org/apache/http/contrib/logging/LoggingIOSession.java)
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/LoggingIOSession.java?p2=httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/LoggingIOSession.java&p1=httpcomponents/httpcore/trunk/httpcore-contrib/src/main/java/org/apache/http/contrib/logging/LoggingIOSession.java&r1=1163243&r2=1163256&rev=1163256&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-contrib/src/main/java/org/apache/http/contrib/logging/LoggingIOSession.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/LoggingIOSession.java Tue Aug 30 15:16:46 2011
@@ -25,7 +25,7 @@
  *
  */
 
-package org.apache.http.contrib.logging;
+package org.apache.http.testserver;
 
 import java.io.IOException;
 import java.net.SocketAddress;

Propchange: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/LoggingIOSession.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/LoggingIOSession.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/LoggingIOSession.java
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Tue Aug 30 15:16:46 2011
@@ -0,0 +1 @@
+/httpcomponents/httpcore/branches/ibm_compat_branch/httpcore-contrib/src/main/java/org/apache/http/contrib/logging/LoggingIOSession.java:755687-758898

Propchange: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/LoggingIOSession.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Copied: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/LoggingNHttpClientConnection.java (from r1163246, httpcomponents/httpcore/trunk/httpcore-contrib/src/main/java/org/apache/http/contrib/logging/LoggingNHttpClientConnection.java)
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/LoggingNHttpClientConnection.java?p2=httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/LoggingNHttpClientConnection.java&p1=httpcomponents/httpcore/trunk/httpcore-contrib/src/main/java/org/apache/http/contrib/logging/LoggingNHttpClientConnection.java&r1=1163246&r2=1163256&rev=1163256&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-contrib/src/main/java/org/apache/http/contrib/logging/LoggingNHttpClientConnection.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/LoggingNHttpClientConnection.java Tue Aug 30 15:16:46 2011
@@ -25,7 +25,7 @@
  *
  */
 
-package org.apache.http.contrib.logging;
+package org.apache.http.testserver;
 
 import java.io.IOException;
 import java.nio.channels.ReadableByteChannel;

Propchange: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/LoggingNHttpClientConnection.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/LoggingNHttpClientConnection.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/LoggingNHttpClientConnection.java
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Tue Aug 30 15:16:46 2011
@@ -0,0 +1 @@
+/httpcomponents/httpcore/branches/ibm_compat_branch/httpcore-contrib/src/main/java/org/apache/http/contrib/logging/LoggingNHttpClientConnection.java:755687-758898

Propchange: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/LoggingNHttpClientConnection.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Copied: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/LoggingNHttpServerConnection.java (from r1163244, httpcomponents/httpcore/trunk/httpcore-contrib/src/main/java/org/apache/http/contrib/logging/LoggingNHttpServerConnection.java)
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/LoggingNHttpServerConnection.java?p2=httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/LoggingNHttpServerConnection.java&p1=httpcomponents/httpcore/trunk/httpcore-contrib/src/main/java/org/apache/http/contrib/logging/LoggingNHttpServerConnection.java&r1=1163244&r2=1163256&rev=1163256&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-contrib/src/main/java/org/apache/http/contrib/logging/LoggingNHttpServerConnection.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/LoggingNHttpServerConnection.java Tue Aug 30 15:16:46 2011
@@ -25,7 +25,7 @@
  *
  */
 
-package org.apache.http.contrib.logging;
+package org.apache.http.testserver;
 
 import java.io.IOException;
 import java.nio.channels.ReadableByteChannel;

Propchange: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/LoggingNHttpServerConnection.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/LoggingNHttpServerConnection.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/LoggingNHttpServerConnection.java
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Tue Aug 30 15:16:46 2011
@@ -0,0 +1 @@
+/httpcomponents/httpcore/branches/ibm_compat_branch/httpcore-contrib/src/main/java/org/apache/http/contrib/logging/LoggingNHttpServerConnection.java:755687-758898

Propchange: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/LoggingNHttpServerConnection.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Copied: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/Wire.java (from r1163243, httpcomponents/httpcore/trunk/httpcore-contrib/src/main/java/org/apache/http/contrib/logging/Wire.java)
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/Wire.java?p2=httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/Wire.java&p1=httpcomponents/httpcore/trunk/httpcore-contrib/src/main/java/org/apache/http/contrib/logging/Wire.java&r1=1163243&r2=1163256&rev=1163256&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-contrib/src/main/java/org/apache/http/contrib/logging/Wire.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/Wire.java Tue Aug 30 15:16:46 2011
@@ -24,7 +24,8 @@
  * <http://www.apache.org/>.
  *
  */
-package org.apache.http.contrib.logging;
+
+package org.apache.http.testserver;
 
 import java.nio.ByteBuffer;
 

Propchange: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/Wire.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/Wire.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/Wire.java
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Tue Aug 30 15:16:46 2011
@@ -0,0 +1 @@
+/httpcomponents/httpcore/branches/ibm_compat_branch/httpcore-contrib/src/main/java/org/apache/http/contrib/logging/Wire.java:755687-758898

Propchange: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/testserver/Wire.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/BasicHttpContext.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/BasicHttpContext.java?rev=1163256&r1=1163255&r2=1163256&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/BasicHttpContext.java (original)
+++ httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/BasicHttpContext.java Tue Aug 30 15:16:46 2011
@@ -90,4 +90,13 @@ public class BasicHttpContext implements
         }
     }
 
+    /**
+     * @since 4.2
+     */
+    public void clear() {
+        if (this.map != null) {
+            this.map.clear();
+        }
+    }
+
 }

Modified: httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/SyncBasicHttpContext.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/SyncBasicHttpContext.java?rev=1163256&r1=1163255&r2=1163256&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/SyncBasicHttpContext.java (original)
+++ httpcomponents/httpcore/trunk/httpcore/src/main/java/org/apache/http/protocol/SyncBasicHttpContext.java Tue Aug 30 15:16:46 2011
@@ -41,6 +41,13 @@ public class SyncBasicHttpContext extend
         super(parentContext);
     }
 
+    /**
+     * @since 4.2
+     */
+    public SyncBasicHttpContext() {
+        super();
+    }
+
     @Override
     public synchronized Object getAttribute(final String id) {
         return super.getAttribute(id);
@@ -56,4 +63,12 @@ public class SyncBasicHttpContext extend
         return super.removeAttribute(id);
     }
 
+    /**
+     * @since 4.2
+     */
+    @Override
+    public synchronized void clear() {
+        super.clear();
+    }
+
 }

Modified: httpcomponents/httpcore/trunk/pom.xml
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/pom.xml?rev=1163256&r1=1163255&r2=1163256&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/pom.xml (original)
+++ httpcomponents/httpcore/trunk/pom.xml Tue Aug 30 15:16:46 2011
@@ -75,7 +75,8 @@
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
     <junit.version>4.8.2</junit.version>
     <mockito.version>1.8.5</mockito.version>
-    <comparisonVersion>4.0</comparisonVersion>
+    <commons-logging.version>1.1.1</commons-logging.version>
+    <comparisonVersion>4.1</comparisonVersion>
   </properties>
 
   <dependencyManagement>
@@ -92,6 +93,12 @@
         <version>${mockito.version}</version>
         <scope>test</scope>
       </dependency>
+      <dependency>
+        <groupId>commons-logging</groupId>
+        <artifactId>commons-logging</artifactId>
+        <version>${commons-logging.version}</version>
+        <scope>test</scope>
+      </dependency>
     </dependencies>
   </dependencyManagement>