Hi All: Looking at this commit reminds me that:
- Sometimes we have names that start with H2 like H2RequesterBootstrap - Sometimes we have names that start with Http2 like Http2StreamListener I find the mix not a good thing and confusing. Same for "H1", see other email thread. Gary On Fri, Jun 7, 2019 at 12:36 PM <[email protected]> wrote: > This is an automated email from the ASF dual-hosted git repository. > > olegk pushed a commit to branch master > in repository https://gitbox.apache.org/repos/asf/httpcomponents-core.git > > commit d8cf0742d9c4bdb5bc5297add9036b4023b43833 > Author: Oleg Kalnichevski <[email protected]> > AuthorDate: Fri Jun 7 14:15:36 2019 +0200 > > Improved protocol I/O logging > --- > .../impl/nio/bootstrap/H2RequesterBootstrap.java | 7 +-- > .../impl/nio/bootstrap/H2ServerBootstrap.java | 8 ++-- > .../impl/nio/bootstrap/Http2AsyncRequester.java | 3 +- > .../nio/bootstrap/Http2MultiplexingRequester.java | 3 +- > .../Http2MultiplexingRequesterBootstrap.java | 7 ++- > .../apache/hc/core5/benchmark/HttpBenchmark.java | 44 ++++++++++++++++-- > .../hc/core5/testing/nio/LoggingIOSession.java | 54 > ++++++++++++++++++++-- > .../testing/nio/LoggingIOSessionDecorator.java | 8 ++-- > .../testing/nio/LoggingIOSessionListener.java | 32 ++++--------- > .../core5/http/impl/bootstrap/AsyncRequester.java | 3 +- > .../impl/bootstrap/AsyncRequesterBootstrap.java | 7 +-- > .../hc/core5/http/impl/bootstrap/AsyncServer.java | 3 +- > .../http/impl/bootstrap/AsyncServerBootstrap.java | 8 ++-- > .../http/impl/bootstrap/HttpAsyncRequester.java | 3 +- > .../core5/http/impl/bootstrap/HttpAsyncServer.java | 4 +- > .../core5/reactor/DefaultConnectingIOReactor.java | 2 +- > .../core5/reactor/DefaultListeningIOReactor.java | 2 +- > .../hc/core5/reactor/InternalDataChannel.java | 10 +--- > .../hc/core5/reactor/SingleCoreIOReactor.java | 27 ++++------- > 19 files changed, 146 insertions(+), 89 deletions(-) > > diff --git > a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/bootstrap/H2RequesterBootstrap.java > b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/bootstrap/H2RequesterBootstrap.java > index 256c8a9..79d5d49 100644 > --- > a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/bootstrap/H2RequesterBootstrap.java > +++ > b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/bootstrap/H2RequesterBootstrap.java > @@ -61,6 +61,7 @@ import org.apache.hc.core5.reactor.IOEventHandlerFactory; > import org.apache.hc.core5.reactor.IOReactorConfig; > import org.apache.hc.core5.reactor.IOSession; > import org.apache.hc.core5.reactor.IOSessionListener; > +import org.apache.hc.core5.reactor.ProtocolIOSession; > import org.apache.hc.core5.util.Args; > import org.apache.hc.core5.util.TimeValue; > import org.apache.hc.core5.util.Timeout; > @@ -87,7 +88,7 @@ public class H2RequesterBootstrap { > private PoolConcurrencyPolicy poolConcurrencyPolicy; > private TlsStrategy tlsStrategy; > private Timeout handshakeTimeout; > - private Decorator<IOSession> ioSessionDecorator; > + private Decorator<ProtocolIOSession> ioSessionDecorator; > private IOSessionListener sessionListener; > private Http2StreamListener streamListener; > private Http1StreamListener http1StreamListener; > @@ -195,9 +196,9 @@ public class H2RequesterBootstrap { > } > > /** > - * Assigns {@link IOSession} {@link Decorator} instance. > + * Assigns {@link ProtocolIOSession} {@link Decorator} instance. > */ > - public final H2RequesterBootstrap setIOSessionDecorator(final > Decorator<IOSession> ioSessionDecorator) { > + public final H2RequesterBootstrap setIOSessionDecorator(final > Decorator<ProtocolIOSession> ioSessionDecorator) { > this.ioSessionDecorator = ioSessionDecorator; > return this; > } > diff --git > a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/bootstrap/H2ServerBootstrap.java > b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/bootstrap/H2ServerBootstrap.java > index 1a51590..649b775 100644 > --- > a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/bootstrap/H2ServerBootstrap.java > +++ > b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/bootstrap/H2ServerBootstrap.java > @@ -69,8 +69,8 @@ import org.apache.hc.core5.http2.ssl.H2ServerTlsStrategy; > import org.apache.hc.core5.net.InetAddressUtils; > import org.apache.hc.core5.reactor.IOEventHandlerFactory; > import org.apache.hc.core5.reactor.IOReactorConfig; > -import org.apache.hc.core5.reactor.IOSession; > import org.apache.hc.core5.reactor.IOSessionListener; > +import org.apache.hc.core5.reactor.ProtocolIOSession; > import org.apache.hc.core5.util.Args; > import org.apache.hc.core5.util.Timeout; > > @@ -93,7 +93,7 @@ public class H2ServerBootstrap { > private H1Config h1Config; > private TlsStrategy tlsStrategy; > private Timeout handshakeTimeout; > - private Decorator<IOSession> ioSessionDecorator; > + private Decorator<ProtocolIOSession> ioSessionDecorator; > private IOSessionListener sessionListener; > private Http2StreamListener http2StreamListener; > private Http1StreamListener http1StreamListener; > @@ -179,9 +179,9 @@ public class H2ServerBootstrap { > } > > /** > - * Assigns {@link IOSession} {@link Decorator} instance. > + * Assigns {@link ProtocolIOSession} {@link Decorator} instance. > */ > - public final H2ServerBootstrap setIOSessionDecorator(final > Decorator<IOSession> ioSessionDecorator) { > + public final H2ServerBootstrap setIOSessionDecorator(final > Decorator<ProtocolIOSession> ioSessionDecorator) { > this.ioSessionDecorator = ioSessionDecorator; > return this; > } > diff --git > a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/bootstrap/Http2AsyncRequester.java > b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/bootstrap/Http2AsyncRequester.java > index 06c167a..128c100 100644 > --- > a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/bootstrap/Http2AsyncRequester.java > +++ > b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/bootstrap/Http2AsyncRequester.java > @@ -41,6 +41,7 @@ import org.apache.hc.core5.reactor.IOEventHandlerFactory; > import org.apache.hc.core5.reactor.IOReactorConfig; > import org.apache.hc.core5.reactor.IOSession; > import org.apache.hc.core5.reactor.IOSessionListener; > +import org.apache.hc.core5.reactor.ProtocolIOSession; > import org.apache.hc.core5.util.Timeout; > > /** > @@ -61,7 +62,7 @@ public class Http2AsyncRequester extends > HttpAsyncRequester { > final HttpVersionPolicy versionPolicy, > final IOReactorConfig ioReactorConfig, > final IOEventHandlerFactory eventHandlerFactory, > - final Decorator<IOSession> ioSessionDecorator, > + final Decorator<ProtocolIOSession> ioSessionDecorator, > final IOSessionListener sessionListener, > final ManagedConnPool<HttpHost, IOSession> connPool) { > super(ioReactorConfig, eventHandlerFactory, ioSessionDecorator, > sessionListener, connPool); > diff --git > a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/bootstrap/Http2MultiplexingRequester.java > b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/bootstrap/Http2MultiplexingRequester.java > index f3608a3..63bfbbf 100644 > --- > a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/bootstrap/Http2MultiplexingRequester.java > +++ > b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/bootstrap/Http2MultiplexingRequester.java > @@ -71,6 +71,7 @@ import org.apache.hc.core5.reactor.IOEventHandlerFactory; > import org.apache.hc.core5.reactor.IOReactorConfig; > import org.apache.hc.core5.reactor.IOSession; > import org.apache.hc.core5.reactor.IOSessionListener; > +import org.apache.hc.core5.reactor.ProtocolIOSession; > import org.apache.hc.core5.util.Args; > import org.apache.hc.core5.util.TimeValue; > import org.apache.hc.core5.util.Timeout; > @@ -91,7 +92,7 @@ public class Http2MultiplexingRequester extends > AsyncRequester{ > public Http2MultiplexingRequester( > final IOReactorConfig ioReactorConfig, > final IOEventHandlerFactory eventHandlerFactory, > - final Decorator<IOSession> ioSessionDecorator, > + final Decorator<ProtocolIOSession> ioSessionDecorator, > final IOSessionListener sessionListener, > final Resolver<HttpHost, InetSocketAddress> addressResolver, > final TlsStrategy tlsStrategy) { > diff --git > a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/bootstrap/Http2MultiplexingRequesterBootstrap.java > b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/bootstrap/Http2MultiplexingRequesterBootstrap.java > index 2ec7801..afd7fc7 100644 > --- > a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/bootstrap/Http2MultiplexingRequesterBootstrap.java > +++ > b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/bootstrap/Http2MultiplexingRequesterBootstrap.java > @@ -48,7 +48,6 @@ import org.apache.hc.core5.http2.ssl.H2ClientTlsStrategy; > import org.apache.hc.core5.reactor.IOEventHandler; > import org.apache.hc.core5.reactor.IOEventHandlerFactory; > import org.apache.hc.core5.reactor.IOReactorConfig; > -import org.apache.hc.core5.reactor.IOSession; > import org.apache.hc.core5.reactor.IOSessionListener; > import org.apache.hc.core5.reactor.ProtocolIOSession; > import org.apache.hc.core5.util.Args; > @@ -68,7 +67,7 @@ public class Http2MultiplexingRequesterBootstrap { > private H2Config h2Config; > private TlsStrategy tlsStrategy; > private boolean strictALPNHandshake; > - private Decorator<IOSession> ioSessionDecorator; > + private Decorator<ProtocolIOSession> ioSessionDecorator; > private IOSessionListener sessionListener; > private Http2StreamListener streamListener; > > @@ -126,9 +125,9 @@ public class Http2MultiplexingRequesterBootstrap { > } > > /** > - * Assigns {@link IOSession} {@link Decorator} instance. > + * Assigns {@link ProtocolIOSession} {@link Decorator} instance. > */ > - public final Http2MultiplexingRequesterBootstrap > setIOSessionDecorator(final Decorator<IOSession> ioSessionDecorator) { > + public final Http2MultiplexingRequesterBootstrap > setIOSessionDecorator(final Decorator<ProtocolIOSession> > ioSessionDecorator) { > this.ioSessionDecorator = ioSessionDecorator; > return this; > } > diff --git > a/httpcore5-testing/src/main/java/org/apache/hc/core5/benchmark/HttpBenchmark.java > b/httpcore5-testing/src/main/java/org/apache/hc/core5/benchmark/HttpBenchmark.java > index e3a6c02..d8c1910 100644 > --- > a/httpcore5-testing/src/main/java/org/apache/hc/core5/benchmark/HttpBenchmark.java > +++ > b/httpcore5-testing/src/main/java/org/apache/hc/core5/benchmark/HttpBenchmark.java > @@ -69,9 +69,15 @@ import > org.apache.hc.core5.http2.protocol.H2RequestConnControl; > import org.apache.hc.core5.http2.protocol.H2RequestContent; > import org.apache.hc.core5.http2.protocol.H2RequestTargetHost; > import org.apache.hc.core5.io.CloseMode; > +import org.apache.hc.core5.net.NamedEndpoint; > import org.apache.hc.core5.reactor.Command; > +import org.apache.hc.core5.reactor.IOEventHandler; > import org.apache.hc.core5.reactor.IOReactorConfig; > -import org.apache.hc.core5.reactor.IOSession; > +import org.apache.hc.core5.reactor.ProtocolIOSession; > +import org.apache.hc.core5.reactor.ssl.SSLBufferMode; > +import org.apache.hc.core5.reactor.ssl.SSLSessionInitializer; > +import org.apache.hc.core5.reactor.ssl.SSLSessionVerifier; > +import org.apache.hc.core5.reactor.ssl.TlsDetails; > import org.apache.hc.core5.ssl.SSLContextBuilder; > import org.apache.hc.core5.ssl.SSLContexts; > import org.apache.hc.core5.ssl.TrustStrategy; > @@ -172,11 +178,11 @@ public class HttpBenchmark { > .setHttpProcessor(builder.build()) > .setTlsStrategy(new BasicClientTlsStrategy(sslContext)) > .setVersionPolicy(versionPolicy) > - .setIOSessionDecorator(new Decorator<IOSession>() { > + .setIOSessionDecorator(new Decorator<ProtocolIOSession>() > { > > @Override > - public IOSession decorate(final IOSession ioSession) { > - return new IOSession() { > + public ProtocolIOSession decorate(final > ProtocolIOSession ioSession) { > + return new ProtocolIOSession() { > > @Override > public String getId() { > @@ -317,6 +323,36 @@ public class HttpBenchmark { > ioSession.close(closeMode); > } > > + @Override > + public NamedEndpoint getInitialEndpoint() { > + return ioSession.getInitialEndpoint(); > + } > + > + @Override > + public IOEventHandler getHandler() { > + return ioSession.getHandler(); > + } > + > + @Override > + public void upgrade(final IOEventHandler > handler) { > + ioSession.upgrade(handler); > + } > + > + @Override > + public void startTls(final SSLContext > sslContext, > + final NamedEndpoint > endpoint, > + final SSLBufferMode > sslBufferMode, > + final > SSLSessionInitializer initializer, > + final SSLSessionVerifier > verifier, > + final Timeout > handshakeTimeout) throws UnsupportedOperationException { > + ioSession.startTls( > + sslContext, endpoint, > sslBufferMode, initializer, verifier, handshakeTimeout); > + } > + > + @Override > + public TlsDetails getTlsDetails() { > + return ioSession.getTlsDetails(); > + } > }; > } > > diff --git > a/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/LoggingIOSession.java > b/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/LoggingIOSession.java > index b29beb2..65acd74 100644 > --- > a/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/LoggingIOSession.java > +++ > b/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/LoggingIOSession.java > @@ -34,21 +34,29 @@ import java.nio.channels.ByteChannel; > import java.nio.channels.SelectionKey; > import java.util.concurrent.locks.Lock; > > +import javax.net.ssl.SSLContext; > + > import org.apache.hc.core5.io.CloseMode; > +import org.apache.hc.core5.net.NamedEndpoint; > import org.apache.hc.core5.reactor.Command; > -import org.apache.hc.core5.reactor.IOSession; > +import org.apache.hc.core5.reactor.IOEventHandler; > +import org.apache.hc.core5.reactor.ProtocolIOSession; > +import org.apache.hc.core5.reactor.ssl.SSLBufferMode; > +import org.apache.hc.core5.reactor.ssl.SSLSessionInitializer; > +import org.apache.hc.core5.reactor.ssl.SSLSessionVerifier; > +import org.apache.hc.core5.reactor.ssl.TlsDetails; > import org.apache.hc.core5.testing.classic.Wire; > import org.apache.hc.core5.util.Timeout; > import org.slf4j.Logger; > > -public class LoggingIOSession implements IOSession { > +public class LoggingIOSession implements ProtocolIOSession { > > private final Logger log; > private final Wire wireLog; > - private final IOSession session; > + private final ProtocolIOSession session; > private final ByteChannel channel; > > - public LoggingIOSession(final IOSession session, final Logger log, > final Logger wireLog) { > + public LoggingIOSession(final ProtocolIOSession session, final Logger > log, final Logger wireLog) { > super(); > this.session = session; > this.log = log; > @@ -56,7 +64,7 @@ public class LoggingIOSession implements IOSession { > this.channel = wireLog != null ? new LoggingByteChannel() : > session.channel(); > } > > - public LoggingIOSession(final IOSession session, final Logger log) { > + public LoggingIOSession(final ProtocolIOSession session, final Logger > log) { > this(session, log, null); > } > > @@ -211,6 +219,42 @@ public class LoggingIOSession implements IOSession { > } > > @Override > + public NamedEndpoint getInitialEndpoint() { > + return this.session.getInitialEndpoint(); > + } > + > + @Override > + public IOEventHandler getHandler() { > + return this.session.getHandler(); > + } > + > + @Override > + public void upgrade(final IOEventHandler handler) { > + if (this.log.isDebugEnabled()) { > + this.log.debug(this.session + " Protocol upgrade: " + > (handler != null ? handler.getClass() : null)); > + } > + this.session.upgrade(handler); > + } > + > + @Override > + public void startTls(final SSLContext sslContext, > + final NamedEndpoint endpoint, > + final SSLBufferMode sslBufferMode, > + final SSLSessionInitializer initializer, > + final SSLSessionVerifier verifier, > + final Timeout handshakeTimeout) throws > UnsupportedOperationException { > + if (this.log.isDebugEnabled()) { > + this.log.debug(this.session + " Start TLS"); > + } > + this.session.startTls(sslContext, endpoint, sslBufferMode, > initializer, verifier, handshakeTimeout); > + } > + > + @Override > + public TlsDetails getTlsDetails() { > + return this.session.getTlsDetails(); > + } > + > + @Override > public String toString() { > return this.session.toString(); > } > diff --git > a/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/LoggingIOSessionDecorator.java > b/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/LoggingIOSessionDecorator.java > index ac33f40..4cf5994 100644 > --- > a/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/LoggingIOSessionDecorator.java > +++ > b/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/LoggingIOSessionDecorator.java > @@ -28,11 +28,11 @@ > package org.apache.hc.core5.testing.nio; > > import org.apache.hc.core5.function.Decorator; > -import org.apache.hc.core5.reactor.IOSession; > -import org.slf4j.LoggerFactory; > +import org.apache.hc.core5.reactor.ProtocolIOSession; > import org.slf4j.Logger; > +import org.slf4j.LoggerFactory; > > -public class LoggingIOSessionDecorator implements Decorator<IOSession> { > +public class LoggingIOSessionDecorator implements > Decorator<ProtocolIOSession> { > > public final static LoggingIOSessionDecorator INSTANCE = new > LoggingIOSessionDecorator(); > > @@ -42,7 +42,7 @@ public class LoggingIOSessionDecorator implements > Decorator<IOSession> { > } > > @Override > - public IOSession decorate(final IOSession ioSession) { > + public ProtocolIOSession decorate(final ProtocolIOSession ioSession) { > final Logger sessionLog = > LoggerFactory.getLogger(ioSession.getClass()); > return new LoggingIOSession(ioSession, sessionLog, wireLog); > } > diff --git > a/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/LoggingIOSessionListener.java > b/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/LoggingIOSessionListener.java > index 6a785ca..09aae51 100644 > --- > a/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/LoggingIOSessionListener.java > +++ > b/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/LoggingIOSessionListener.java > @@ -28,10 +28,8 @@ > package org.apache.hc.core5.testing.nio; > > import org.apache.hc.core5.http.ConnectionClosedException; > -import org.apache.hc.core5.net.InetAddressUtils; > import org.apache.hc.core5.reactor.IOSession; > import org.apache.hc.core5.reactor.IOSessionListener; > -import org.apache.hc.core5.testing.classic.LoggingSupport; > import org.slf4j.Logger; > import org.slf4j.LoggerFactory; > > @@ -47,49 +45,49 @@ public class LoggingIOSessionListener implements > IOSessionListener { > @Override > public void tlsStarted(final IOSession session) { > if (connLog.isDebugEnabled()) { > - connLog.debug(LoggingSupport.getId(session) + " TLS session > started: " + formatSession(session)); > + connLog.debug(session + " TLS session started"); > } > } > > @Override > public void tlsInbound(final IOSession session) { > if (connLog.isDebugEnabled()) { > - connLog.debug(LoggingSupport.getId(session) + " TLS inbound: > " + formatSession(session)); > + connLog.debug(session + " TLS inbound"); > } > } > > @Override > public void tlsOutbound(final IOSession session) { > if (connLog.isDebugEnabled()) { > - connLog.debug(LoggingSupport.getId(session) + " TLS outbound: > " + formatSession(session)); > + connLog.debug(session + " TLS outbound"); > } > } > > @Override > public void connected(final IOSession session) { > if (connLog.isDebugEnabled()) { > - connLog.debug(LoggingSupport.getId(session) + " connected: " > + formatSession(session)); > + connLog.debug(session + " connected"); > } > } > > @Override > public void inputReady(final IOSession session) { > if (connLog.isDebugEnabled()) { > - connLog.debug(LoggingSupport.getId(session) + " input ready: > " + formatSession(session)); > + connLog.debug(session + " input ready"); > } > } > > @Override > public void outputReady(final IOSession session) { > if (connLog.isDebugEnabled()) { > - connLog.debug(LoggingSupport.getId(session) + " output ready: > " + formatSession(session)); > + connLog.debug(session + " output ready"); > } > } > > @Override > public void timeout(final IOSession session) { > if (connLog.isDebugEnabled()) { > - connLog.debug(LoggingSupport.getId(session) + " timeout: " + > formatSession(session)); > + connLog.debug(session + " timeout"); > } > } > > @@ -98,26 +96,14 @@ public class LoggingIOSessionListener implements > IOSessionListener { > if (ex instanceof ConnectionClosedException) { > return; > } > - connLog.error(LoggingSupport.getId(session) + " " + > ex.getMessage(), ex); > + connLog.error(session + " " + ex.getMessage(), ex); > } > > @Override > public void disconnected(final IOSession session) { > if (connLog.isDebugEnabled()) { > - connLog.debug(LoggingSupport.getId(session) + " > disconnected"); > + connLog.debug(session + " disconnected"); > } > } > > - private static String formatSession(final IOSession session) { > - final StringBuilder buffer = new StringBuilder(90); > - if (session.isClosed()) { > - buffer.append("closed"); > - } else { > - InetAddressUtils.formatAddress(buffer, > session.getLocalAddress()); > - buffer.append("<->"); > - InetAddressUtils.formatAddress(buffer, > session.getRemoteAddress()); > - } > - return buffer.toString(); > - } > - > } > diff --git > a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/AsyncRequester.java > b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/AsyncRequester.java > index f9a9beb..29a2983 100644 > --- > a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/AsyncRequester.java > +++ > b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/AsyncRequester.java > @@ -50,6 +50,7 @@ import org.apache.hc.core5.reactor.IOReactorService; > import org.apache.hc.core5.reactor.IOReactorStatus; > import org.apache.hc.core5.reactor.IOSession; > import org.apache.hc.core5.reactor.IOSessionListener; > +import org.apache.hc.core5.reactor.ProtocolIOSession; > import org.apache.hc.core5.util.Args; > import org.apache.hc.core5.util.TimeValue; > import org.apache.hc.core5.util.Timeout; > @@ -68,7 +69,7 @@ public class AsyncRequester extends > AbstractConnectionInitiatorBase implements I > public AsyncRequester( > final IOEventHandlerFactory eventHandlerFactory, > final IOReactorConfig ioReactorConfig, > - final Decorator<IOSession> ioSessionDecorator, > + final Decorator<ProtocolIOSession> ioSessionDecorator, > final IOSessionListener sessionListener, > final Callback<IOSession> sessionShutdownCallback, > final Resolver<HttpHost, InetSocketAddress> addressResolver) { > diff --git > a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/AsyncRequesterBootstrap.java > b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/AsyncRequesterBootstrap.java > index 1432394..06b9e49 100644 > --- > a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/AsyncRequesterBootstrap.java > +++ > b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/AsyncRequesterBootstrap.java > @@ -49,6 +49,7 @@ import org.apache.hc.core5.reactor.IOEventHandlerFactory; > import org.apache.hc.core5.reactor.IOReactorConfig; > import org.apache.hc.core5.reactor.IOSession; > import org.apache.hc.core5.reactor.IOSessionListener; > +import org.apache.hc.core5.reactor.ProtocolIOSession; > import org.apache.hc.core5.util.Timeout; > > /** > @@ -70,7 +71,7 @@ public class AsyncRequesterBootstrap { > private PoolConcurrencyPolicy poolConcurrencyPolicy; > private TlsStrategy tlsStrategy; > private Timeout handshakeTimeout; > - private Decorator<IOSession> ioSessionDecorator; > + private Decorator<ProtocolIOSession> ioSessionDecorator; > private IOSessionListener sessionListener; > private Http1StreamListener streamListener; > private ConnPoolListener<HttpHost> connPoolListener; > @@ -168,9 +169,9 @@ public class AsyncRequesterBootstrap { > } > > /** > - * Assigns {@link IOSession} {@link Decorator} instance. > + * Assigns {@link ProtocolIOSession} {@link Decorator} instance. > */ > - public final AsyncRequesterBootstrap setIOSessionDecorator(final > Decorator<IOSession> ioSessionDecorator) { > + public final AsyncRequesterBootstrap setIOSessionDecorator(final > Decorator<ProtocolIOSession> ioSessionDecorator) { > this.ioSessionDecorator = ioSessionDecorator; > return this; > } > diff --git > a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/AsyncServer.java > b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/AsyncServer.java > index 04a4630..4eb09c5 100644 > --- > a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/AsyncServer.java > +++ > b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/AsyncServer.java > @@ -50,6 +50,7 @@ import org.apache.hc.core5.reactor.IOReactorStatus; > import org.apache.hc.core5.reactor.IOSession; > import org.apache.hc.core5.reactor.IOSessionListener; > import org.apache.hc.core5.reactor.ListenerEndpoint; > +import org.apache.hc.core5.reactor.ProtocolIOSession; > import org.apache.hc.core5.util.TimeValue; > > /** > @@ -63,7 +64,7 @@ public class AsyncServer extends > AbstractConnectionInitiatorBase implements IORe > public AsyncServer( > final IOEventHandlerFactory eventHandlerFactory, > final IOReactorConfig ioReactorConfig, > - final Decorator<IOSession> ioSessionDecorator, > + final Decorator<ProtocolIOSession> ioSessionDecorator, > final IOSessionListener sessionListener, > final Callback<IOSession> sessionShutdownCallback) { > this.ioReactor = new DefaultListeningIOReactor( > diff --git > a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/AsyncServerBootstrap.java > b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/AsyncServerBootstrap.java > index 2efe675..509ea98 100644 > --- > a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/AsyncServerBootstrap.java > +++ > b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/AsyncServerBootstrap.java > @@ -62,8 +62,8 @@ import org.apache.hc.core5.http.protocol.UriPatternType; > import org.apache.hc.core5.net.InetAddressUtils; > import org.apache.hc.core5.reactor.IOEventHandlerFactory; > import org.apache.hc.core5.reactor.IOReactorConfig; > -import org.apache.hc.core5.reactor.IOSession; > import org.apache.hc.core5.reactor.IOSessionListener; > +import org.apache.hc.core5.reactor.ProtocolIOSession; > import org.apache.hc.core5.util.Args; > import org.apache.hc.core5.util.Timeout; > > @@ -85,7 +85,7 @@ public class AsyncServerBootstrap { > private ConnectionReuseStrategy connStrategy; > private TlsStrategy tlsStrategy; > private Timeout handshakeTimeout; > - private Decorator<IOSession> ioSessionDecorator; > + private Decorator<ProtocolIOSession> ioSessionDecorator; > private IOSessionListener sessionListener; > private Http1StreamListener streamListener; > > @@ -163,9 +163,9 @@ public class AsyncServerBootstrap { > } > > /** > - * Assigns {@link IOSession} {@link Decorator} instance. > + * Assigns {@link ProtocolIOSession} {@link Decorator} instance. > */ > - public final AsyncServerBootstrap setIOSessionDecorator(final > Decorator<IOSession> ioSessionDecorator) { > + public final AsyncServerBootstrap setIOSessionDecorator(final > Decorator<ProtocolIOSession> ioSessionDecorator) { > this.ioSessionDecorator = ioSessionDecorator; > return this; > } > diff --git > a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/HttpAsyncRequester.java > b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/HttpAsyncRequester.java > index 13dafe5..0dff2f7 100644 > --- > a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/HttpAsyncRequester.java > +++ > b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/HttpAsyncRequester.java > @@ -72,6 +72,7 @@ import org.apache.hc.core5.reactor.IOEventHandlerFactory; > import org.apache.hc.core5.reactor.IOReactorConfig; > import org.apache.hc.core5.reactor.IOSession; > import org.apache.hc.core5.reactor.IOSessionListener; > +import org.apache.hc.core5.reactor.ProtocolIOSession; > import org.apache.hc.core5.util.Args; > import org.apache.hc.core5.util.TimeValue; > import org.apache.hc.core5.util.Timeout; > @@ -92,7 +93,7 @@ public class HttpAsyncRequester extends AsyncRequester > implements ConnPoolContro > public HttpAsyncRequester( > final IOReactorConfig ioReactorConfig, > final IOEventHandlerFactory eventHandlerFactory, > - final Decorator<IOSession> ioSessionDecorator, > + final Decorator<ProtocolIOSession> ioSessionDecorator, > final IOSessionListener sessionListener, > final ManagedConnPool<HttpHost, IOSession> connPool) { > super(eventHandlerFactory, ioReactorConfig, ioSessionDecorator, > sessionListener, > diff --git > a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/HttpAsyncServer.java > b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/HttpAsyncServer.java > index 46c1cbd..e965742 100644 > --- > a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/HttpAsyncServer.java > +++ > b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/HttpAsyncServer.java > @@ -31,8 +31,8 @@ import org.apache.hc.core5.function.Decorator; > import org.apache.hc.core5.http.nio.command.ShutdownCommand; > import org.apache.hc.core5.reactor.IOEventHandlerFactory; > import org.apache.hc.core5.reactor.IOReactorConfig; > -import org.apache.hc.core5.reactor.IOSession; > import org.apache.hc.core5.reactor.IOSessionListener; > +import org.apache.hc.core5.reactor.ProtocolIOSession; > > /** > * HTTP/1.1 server side message exchange handler. > @@ -48,7 +48,7 @@ public class HttpAsyncServer extends AsyncServer { > public HttpAsyncServer( > final IOEventHandlerFactory eventHandlerFactory, > final IOReactorConfig ioReactorConfig, > - final Decorator<IOSession> ioSessionDecorator, > + final Decorator<ProtocolIOSession> ioSessionDecorator, > final IOSessionListener sessionListener) { > super(eventHandlerFactory, ioReactorConfig, ioSessionDecorator, > sessionListener, > ShutdownCommand.GRACEFUL_NORMAL_CALLBACK); > diff --git > a/httpcore5/src/main/java/org/apache/hc/core5/reactor/DefaultConnectingIOReactor.java > b/httpcore5/src/main/java/org/apache/hc/core5/reactor/DefaultConnectingIOReactor.java > index a421ecb..1b10cde 100644 > --- > a/httpcore5/src/main/java/org/apache/hc/core5/reactor/DefaultConnectingIOReactor.java > +++ > b/httpcore5/src/main/java/org/apache/hc/core5/reactor/DefaultConnectingIOReactor.java > @@ -65,7 +65,7 @@ public class DefaultConnectingIOReactor extends > AbstractIOReactorBase { > final IOEventHandlerFactory eventHandlerFactory, > final IOReactorConfig ioReactorConfig, > final ThreadFactory threadFactory, > - final Decorator<IOSession> ioSessionDecorator, > + final Decorator<ProtocolIOSession> ioSessionDecorator, > final IOSessionListener sessionListener, > final Callback<IOSession> sessionShutdownCallback) { > Args.notNull(eventHandlerFactory, "Event handler factory"); > diff --git > a/httpcore5/src/main/java/org/apache/hc/core5/reactor/DefaultListeningIOReactor.java > b/httpcore5/src/main/java/org/apache/hc/core5/reactor/DefaultListeningIOReactor.java > index 64500c9..aad2664 100644 > --- > a/httpcore5/src/main/java/org/apache/hc/core5/reactor/DefaultListeningIOReactor.java > +++ > b/httpcore5/src/main/java/org/apache/hc/core5/reactor/DefaultListeningIOReactor.java > @@ -83,7 +83,7 @@ public class DefaultListeningIOReactor extends > AbstractIOReactorBase implements > final IOReactorConfig ioReactorConfig, > final ThreadFactory dispatchThreadFactory, > final ThreadFactory listenerThreadFactory, > - final Decorator<IOSession> ioSessionDecorator, > + final Decorator<ProtocolIOSession> ioSessionDecorator, > final IOSessionListener sessionListener, > final Callback<IOSession> sessionShutdownCallback) { > Args.notNull(eventHandlerFactory, "Event handler factory"); > diff --git > a/httpcore5/src/main/java/org/apache/hc/core5/reactor/InternalDataChannel.java > b/httpcore5/src/main/java/org/apache/hc/core5/reactor/InternalDataChannel.java > index 61b3207..c2f78f5 100644 > --- > a/httpcore5/src/main/java/org/apache/hc/core5/reactor/InternalDataChannel.java > +++ > b/httpcore5/src/main/java/org/apache/hc/core5/reactor/InternalDataChannel.java > @@ -395,18 +395,12 @@ final class InternalDataChannel extends > InternalChannel implements ProtocolIOSes > > @Override > public String toString() { > - final StringBuilder buf = new StringBuilder(); > final SSLIOSession tlsSession = tlsSessionRef.get(); > if (tlsSession != null) { > - buf.append(tlsSession); > + return tlsSession.toString(); > } else { > - buf.append(ioSession); > + return ioSession.toString(); > } > - final IOEventHandler handler = getHandler(); > - if (handler != null) { > - buf.append(handler); > - } > - return buf.toString(); > } > > } > diff --git > a/httpcore5/src/main/java/org/apache/hc/core5/reactor/SingleCoreIOReactor.java > b/httpcore5/src/main/java/org/apache/hc/core5/reactor/SingleCoreIOReactor.java > index 412ce30..b36f16a 100644 > --- > a/httpcore5/src/main/java/org/apache/hc/core5/reactor/SingleCoreIOReactor.java > +++ > b/httpcore5/src/main/java/org/apache/hc/core5/reactor/SingleCoreIOReactor.java > @@ -45,7 +45,6 @@ import java.util.concurrent.atomic.AtomicBoolean; > import org.apache.hc.core5.concurrent.FutureCallback; > import org.apache.hc.core5.function.Callback; > import org.apache.hc.core5.function.Decorator; > -import org.apache.hc.core5.io.CloseMode; > import org.apache.hc.core5.io.Closer; > import org.apache.hc.core5.net.NamedEndpoint; > import org.apache.hc.core5.util.Args; > @@ -57,7 +56,7 @@ class SingleCoreIOReactor extends > AbstractSingleCoreIOReactor implements Connect > > private final IOEventHandlerFactory eventHandlerFactory; > private final IOReactorConfig reactorConfig; > - private final Decorator<IOSession> ioSessionDecorator; > + private final Decorator<ProtocolIOSession> ioSessionDecorator; > private final IOSessionListener sessionListener; > private final Callback<IOSession> sessionShutdownCallback; > private final Queue<InternalDataChannel> closedSessions; > @@ -71,7 +70,7 @@ class SingleCoreIOReactor extends > AbstractSingleCoreIOReactor implements Connect > final Queue<ExceptionEvent> auditLog, > final IOEventHandlerFactory eventHandlerFactory, > final IOReactorConfig reactorConfig, > - final Decorator<IOSession> ioSessionDecorator, > + final Decorator<ProtocolIOSession> ioSessionDecorator, > final IOSessionListener sessionListener, > final Callback<IOSession> sessionShutdownCallback) { > super(auditLog); > @@ -170,11 +169,7 @@ class SingleCoreIOReactor extends > AbstractSingleCoreIOReactor implements Connect > private void processEvents(final Set<SelectionKey> selectedKeys) { > for (final SelectionKey key : selectedKeys) { > final InternalChannel channel = (InternalChannel) > key.attachment(); > - try { > - channel.handleIOEvent(key.readyOps()); > - } catch (final CancelledKeyException ex) { > - channel.close(CloseMode.GRACEFUL); > - } > + channel.handleIOEvent(key.readyOps()); > } > selectedKeys.clear(); > } > @@ -200,12 +195,10 @@ class SingleCoreIOReactor extends > AbstractSingleCoreIOReactor implements Connect > } catch (final ClosedChannelException ex) { > return; > } > - IOSession ioSession = new IOSessionImpl(key, socketChannel); > - if (ioSessionDecorator != null) { > - ioSession = ioSessionDecorator.decorate(ioSession); > - } > + final IOSession ioSession = new IOSessionImpl(key, > socketChannel); > final InternalDataChannel dataChannel = new > InternalDataChannel(ioSession, null, sessionListener, closedSessions); > - > dataChannel.upgrade(this.eventHandlerFactory.createHandler(dataChannel, > null)); > + final ProtocolIOSession protocolSession = ioSessionDecorator > != null ? ioSessionDecorator.decorate(dataChannel) : dataChannel; > + > dataChannel.upgrade(this.eventHandlerFactory.createHandler(protocolSession, > null)); > > dataChannel.setSocketTimeout(this.reactorConfig.getSoTimeout()); > key.attach(dataChannel); > dataChannel.handleIOEvent(SelectionKey.OP_CONNECT); > @@ -337,12 +330,10 @@ class SingleCoreIOReactor extends > AbstractSingleCoreIOReactor implements Connect > final SocketChannel socketChannel, > final NamedEndpoint namedEndpoint, > final Object attachment) { > - IOSession ioSession = new IOSessionImpl(key, > socketChannel); > - if (ioSessionDecorator != null) { > - ioSession = ioSessionDecorator.decorate(ioSession); > - } > + final IOSession ioSession = new IOSessionImpl(key, > socketChannel); > final InternalDataChannel dataChannel = new > InternalDataChannel(ioSession, namedEndpoint, sessionListener, > closedSessions); > - > dataChannel.upgrade(eventHandlerFactory.createHandler(dataChannel, > attachment)); > + final ProtocolIOSession protocolSession = > ioSessionDecorator != null ? ioSessionDecorator.decorate(dataChannel) : > dataChannel; > + > dataChannel.upgrade(eventHandlerFactory.createHandler(protocolSession, > attachment)); > > dataChannel.setSocketTimeout(reactorConfig.getSoTimeout()); > return dataChannel; > } > >
