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 2018/12/01 12:57:42 UTC
httpcomponents-core git commit: Moved start TLS logic from IOSession
request callback to individual IOEventHandler factories
Repository: httpcomponents-core
Updated Branches:
refs/heads/master b76b34e3c -> 5e88e5126
Moved start TLS logic from IOSession request callback to individual IOEventHandler factories
Project: http://git-wip-us.apache.org/repos/asf/httpcomponents-core/repo
Commit: http://git-wip-us.apache.org/repos/asf/httpcomponents-core/commit/5e88e512
Tree: http://git-wip-us.apache.org/repos/asf/httpcomponents-core/tree/5e88e512
Diff: http://git-wip-us.apache.org/repos/asf/httpcomponents-core/diff/5e88e512
Branch: refs/heads/master
Commit: 5e88e51263ade7bc516d6089560927bc1099f930
Parents: b76b34e
Author: Oleg Kalnichevski <ol...@apache.org>
Authored: Sat Dec 1 13:57:29 2018 +0100
Committer: Oleg Kalnichevski <ol...@apache.org>
Committed: Sat Dec 1 13:57:29 2018 +0100
----------------------------------------------------------------------
.../ClientHttpProtocolNegotiatorFactory.java | 19 ++++++++++++++++++-
.../nio/bootstrap/H2RequesterBootstrap.java | 6 +++---
.../impl/nio/bootstrap/Http2AsyncRequester.java | 6 ++----
.../impl/bootstrap/AsyncRequesterBootstrap.java | 7 ++++---
.../http/impl/bootstrap/HttpAsyncRequester.java | 18 +-----------------
.../nio/ClientHttp1IOEventHandlerFactory.java | 20 +++++++++++++++++++-
.../hc/core5/reactor/InternalDataChannel.java | 6 +++++-
.../hc/core5/reactor/ProtocolIOSession.java | 5 ++++-
8 files changed, 56 insertions(+), 31 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/httpcomponents-core/blob/5e88e512/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/ClientHttpProtocolNegotiatorFactory.java
----------------------------------------------------------------------
diff --git a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/ClientHttpProtocolNegotiatorFactory.java b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/ClientHttpProtocolNegotiatorFactory.java
index 985b675..90b5ddb 100644
--- a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/ClientHttpProtocolNegotiatorFactory.java
+++ b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/ClientHttpProtocolNegotiatorFactory.java
@@ -30,7 +30,10 @@ package org.apache.hc.core5.http2.impl.nio;
import org.apache.hc.core5.annotation.Contract;
import org.apache.hc.core5.annotation.Internal;
import org.apache.hc.core5.annotation.ThreadingBehavior;
+import org.apache.hc.core5.http.HttpHost;
+import org.apache.hc.core5.http.URIScheme;
import org.apache.hc.core5.http.impl.nio.ClientHttp1StreamDuplexerFactory;
+import org.apache.hc.core5.http.nio.ssl.TlsStrategy;
import org.apache.hc.core5.http2.HttpVersionPolicy;
import org.apache.hc.core5.reactor.IOEventHandlerFactory;
import org.apache.hc.core5.reactor.ProtocolIOSession;
@@ -48,18 +51,32 @@ public class ClientHttpProtocolNegotiatorFactory implements IOEventHandlerFactor
private final ClientHttp1StreamDuplexerFactory http1StreamHandlerFactory;
private final ClientHttp2StreamMultiplexerFactory http2StreamHandlerFactory;
private final HttpVersionPolicy versionPolicy;
+ private final TlsStrategy tlsStrategy;
public ClientHttpProtocolNegotiatorFactory(
final ClientHttp1StreamDuplexerFactory http1StreamHandlerFactory,
final ClientHttp2StreamMultiplexerFactory http2StreamHandlerFactory,
- final HttpVersionPolicy versionPolicy) {
+ final HttpVersionPolicy versionPolicy,
+ final TlsStrategy tlsStrategy) {
this.http1StreamHandlerFactory = Args.notNull(http1StreamHandlerFactory, "HTTP/1.1 stream handler factory");
this.http2StreamHandlerFactory = Args.notNull(http2StreamHandlerFactory, "HTTP/2 stream handler factory");
this.versionPolicy = versionPolicy != null ? versionPolicy : HttpVersionPolicy.NEGOTIATE;
+ this.tlsStrategy = tlsStrategy;
}
@Override
public ClientHttpProtocolNegotiator createHandler(final ProtocolIOSession ioSession, final Object attachment) {
+ if (tlsStrategy != null && ioSession.getInitialEndpoint() instanceof HttpHost) {
+ final HttpHost host = (HttpHost) ioSession.getInitialEndpoint();
+ if (URIScheme.HTTPS.same(host.getSchemeName())) {
+ tlsStrategy.upgrade(
+ ioSession,
+ host,
+ ioSession.getLocalAddress(),
+ ioSession.getRemoteAddress(),
+ attachment);
+ }
+ }
return new ClientHttpProtocolNegotiator(
ioSession,
http1StreamHandlerFactory,
http://git-wip-us.apache.org/repos/asf/httpcomponents-core/blob/5e88e512/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/bootstrap/H2RequesterBootstrap.java
----------------------------------------------------------------------
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 f2619e1..ec6ca07 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
@@ -303,15 +303,15 @@ public class H2RequesterBootstrap {
final IOEventHandlerFactory ioEventHandlerFactory = new ClientHttpProtocolNegotiatorFactory(
http1StreamHandlerFactory,
http2StreamHandlerFactory,
- versionPolicy != null ? versionPolicy : HttpVersionPolicy.NEGOTIATE);
+ versionPolicy != null ? versionPolicy : HttpVersionPolicy.NEGOTIATE,
+ tlsStrategy != null ? tlsStrategy : new H2ClientTlsStrategy());
return new Http2AsyncRequester(
versionPolicy != null ? versionPolicy : HttpVersionPolicy.NEGOTIATE,
ioReactorConfig,
ioEventHandlerFactory,
ioSessionDecorator,
sessionListener,
- connPool,
- tlsStrategy != null ? tlsStrategy : new H2ClientTlsStrategy());
+ connPool);
}
}
http://git-wip-us.apache.org/repos/asf/httpcomponents-core/blob/5e88e512/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/bootstrap/Http2AsyncRequester.java
----------------------------------------------------------------------
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 d64e464..06c167a 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
@@ -35,7 +35,6 @@ import org.apache.hc.core5.function.Decorator;
import org.apache.hc.core5.http.HttpHost;
import org.apache.hc.core5.http.impl.bootstrap.HttpAsyncRequester;
import org.apache.hc.core5.http.nio.AsyncClientEndpoint;
-import org.apache.hc.core5.http.nio.ssl.TlsStrategy;
import org.apache.hc.core5.http2.HttpVersionPolicy;
import org.apache.hc.core5.pool.ManagedConnPool;
import org.apache.hc.core5.reactor.IOEventHandlerFactory;
@@ -64,9 +63,8 @@ public class Http2AsyncRequester extends HttpAsyncRequester {
final IOEventHandlerFactory eventHandlerFactory,
final Decorator<IOSession> ioSessionDecorator,
final IOSessionListener sessionListener,
- final ManagedConnPool<HttpHost, IOSession> connPool,
- final TlsStrategy tlsStrategy) {
- super(ioReactorConfig, eventHandlerFactory, ioSessionDecorator, sessionListener, connPool, tlsStrategy);
+ final ManagedConnPool<HttpHost, IOSession> connPool) {
+ super(ioReactorConfig, eventHandlerFactory, ioSessionDecorator, sessionListener, connPool);
this.versionPolicy = versionPolicy != null ? versionPolicy : HttpVersionPolicy.NEGOTIATE;
}
http://git-wip-us.apache.org/repos/asf/httpcomponents-core/blob/5e88e512/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/AsyncRequesterBootstrap.java
----------------------------------------------------------------------
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 8f154e3..ae37de0 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
@@ -221,14 +221,15 @@ public class AsyncRequesterBootstrap {
null,
null,
streamListener);
- final IOEventHandlerFactory ioEventHandlerFactory = new ClientHttp1IOEventHandlerFactory(streamDuplexerFactory);
+ final IOEventHandlerFactory ioEventHandlerFactory = new ClientHttp1IOEventHandlerFactory(
+ streamDuplexerFactory,
+ tlsStrategy != null ? tlsStrategy : new BasicClientTlsStrategy());
return new HttpAsyncRequester(
ioReactorConfig,
ioEventHandlerFactory,
ioSessionDecorator,
sessionListener,
- connPool,
- tlsStrategy != null ? tlsStrategy : new BasicClientTlsStrategy());
+ connPool);
}
}
http://git-wip-us.apache.org/repos/asf/httpcomponents-core/blob/5e88e512/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/HttpAsyncRequester.java
----------------------------------------------------------------------
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 ee4e675..13dafe5 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
@@ -46,7 +46,6 @@ import org.apache.hc.core5.http.HttpHost;
import org.apache.hc.core5.http.HttpRequest;
import org.apache.hc.core5.http.HttpResponse;
import org.apache.hc.core5.http.ProtocolException;
-import org.apache.hc.core5.http.URIScheme;
import org.apache.hc.core5.http.impl.DefaultAddressResolver;
import org.apache.hc.core5.http.nio.AsyncClientEndpoint;
import org.apache.hc.core5.http.nio.AsyncClientExchangeHandler;
@@ -59,7 +58,6 @@ import org.apache.hc.core5.http.nio.HandlerFactory;
import org.apache.hc.core5.http.nio.RequestChannel;
import org.apache.hc.core5.http.nio.command.RequestExecutionCommand;
import org.apache.hc.core5.http.nio.command.ShutdownCommand;
-import org.apache.hc.core5.http.nio.ssl.TlsStrategy;
import org.apache.hc.core5.http.nio.support.BasicClientExchangeHandler;
import org.apache.hc.core5.http.protocol.HttpContext;
import org.apache.hc.core5.http.protocol.HttpCoreContext;
@@ -74,7 +72,6 @@ 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.ssl.TransportSecurityLayer;
import org.apache.hc.core5.util.Args;
import org.apache.hc.core5.util.TimeValue;
import org.apache.hc.core5.util.Timeout;
@@ -87,7 +84,6 @@ import org.apache.hc.core5.util.Timeout;
public class HttpAsyncRequester extends AsyncRequester implements ConnPoolControl<HttpHost> {
private final ManagedConnPool<HttpHost, IOSession> connPool;
- private final TlsStrategy tlsStrategy;
/**
* Use {@link AsyncRequesterBootstrap} to create instances of this class.
@@ -98,12 +94,10 @@ public class HttpAsyncRequester extends AsyncRequester implements ConnPoolContro
final IOEventHandlerFactory eventHandlerFactory,
final Decorator<IOSession> ioSessionDecorator,
final IOSessionListener sessionListener,
- final ManagedConnPool<HttpHost, IOSession> connPool,
- final TlsStrategy tlsStrategy) {
+ final ManagedConnPool<HttpHost, IOSession> connPool) {
super(eventHandlerFactory, ioReactorConfig, ioSessionDecorator, sessionListener,
ShutdownCommand.GRACEFUL_IMMEDIATE_CALLBACK, DefaultAddressResolver.INSTANCE);
this.connPool = Args.notNull(connPool, "Connection pool");
- this.tlsStrategy = tlsStrategy;
}
@Override
@@ -194,16 +188,6 @@ public class HttpAsyncRequester extends AsyncRequester implements ConnPoolContro
@Override
public void completed(final IOSession session) {
- if (tlsStrategy != null
- && URIScheme.HTTPS.same(host.getSchemeName())
- && session instanceof TransportSecurityLayer) {
- tlsStrategy.upgrade(
- (TransportSecurityLayer) session,
- host,
- session.getLocalAddress(),
- session.getRemoteAddress(),
- attachment);
- }
session.setSocketTimeout(timeout);
poolEntry.assignConnection(session);
resultFuture.completed(endpoint);
http://git-wip-us.apache.org/repos/asf/httpcomponents-core/blob/5e88e512/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/ClientHttp1IOEventHandlerFactory.java
----------------------------------------------------------------------
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/ClientHttp1IOEventHandlerFactory.java b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/ClientHttp1IOEventHandlerFactory.java
index 5055a95..c787f21 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/ClientHttp1IOEventHandlerFactory.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/ClientHttp1IOEventHandlerFactory.java
@@ -29,6 +29,9 @@ package org.apache.hc.core5.http.impl.nio;
import org.apache.hc.core5.annotation.Contract;
import org.apache.hc.core5.annotation.ThreadingBehavior;
+import org.apache.hc.core5.http.HttpHost;
+import org.apache.hc.core5.http.URIScheme;
+import org.apache.hc.core5.http.nio.ssl.TlsStrategy;
import org.apache.hc.core5.reactor.IOEventHandler;
import org.apache.hc.core5.reactor.IOEventHandlerFactory;
import org.apache.hc.core5.reactor.ProtocolIOSession;
@@ -43,13 +46,28 @@ import org.apache.hc.core5.util.Args;
public class ClientHttp1IOEventHandlerFactory implements IOEventHandlerFactory {
private final ClientHttp1StreamDuplexerFactory streamDuplexerFactory;
+ private final TlsStrategy tlsStrategy;
- public ClientHttp1IOEventHandlerFactory(final ClientHttp1StreamDuplexerFactory streamDuplexerFactory) {
+ public ClientHttp1IOEventHandlerFactory(
+ final ClientHttp1StreamDuplexerFactory streamDuplexerFactory,
+ final TlsStrategy tlsStrategy) {
this.streamDuplexerFactory = Args.notNull(streamDuplexerFactory, "Stream duplexer factory");
+ this.tlsStrategy = tlsStrategy;
}
@Override
public IOEventHandler createHandler(final ProtocolIOSession ioSession, final Object attachment) {
+ if (tlsStrategy != null && ioSession.getInitialEndpoint() instanceof HttpHost) {
+ final HttpHost host = (HttpHost) ioSession.getInitialEndpoint();
+ if (URIScheme.HTTPS.same(host.getSchemeName())) {
+ tlsStrategy.upgrade(
+ ioSession,
+ host,
+ ioSession.getLocalAddress(),
+ ioSession.getRemoteAddress(),
+ attachment);
+ }
+ }
return new ClientHttp1IOEventHandler(streamDuplexerFactory.create(ioSession));
}
http://git-wip-us.apache.org/repos/asf/httpcomponents-core/blob/5e88e512/httpcore5/src/main/java/org/apache/hc/core5/reactor/InternalDataChannel.java
----------------------------------------------------------------------
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 3678451..48cf90b 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
@@ -81,13 +81,17 @@ final class InternalDataChannel extends InternalChannel implements ProtocolIOSes
return ioSession.getId();
}
-
@Override
public IOEventHandler getHandler() {
return handlerRef.get();
}
@Override
+ public NamedEndpoint getInitialEndpoint() {
+ return initialEndpoint;
+ }
+
+ @Override
public void upgrade(final IOEventHandler handler) {
handlerRef.set(handler);
}
http://git-wip-us.apache.org/repos/asf/httpcomponents-core/blob/5e88e512/httpcore5/src/main/java/org/apache/hc/core5/reactor/ProtocolIOSession.java
----------------------------------------------------------------------
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/reactor/ProtocolIOSession.java b/httpcore5/src/main/java/org/apache/hc/core5/reactor/ProtocolIOSession.java
index b1f32cf..2f561d5 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/reactor/ProtocolIOSession.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/reactor/ProtocolIOSession.java
@@ -27,6 +27,7 @@
package org.apache.hc.core5.reactor;
+import org.apache.hc.core5.net.NamedEndpoint;
import org.apache.hc.core5.reactor.ssl.TransportSecurityLayer;
/**
@@ -35,5 +36,7 @@ import org.apache.hc.core5.reactor.ssl.TransportSecurityLayer;
* @since 5.0
*/
public interface ProtocolIOSession extends IOSession, ProtocolLayer, TransportSecurityLayer {
- // empty
+
+ NamedEndpoint getInitialEndpoint();
+
}