From d0f0dedf20a0e7d67938967c5357b5b17236c5bd Mon Sep 17 00:00:00 2001 From: Simone Bordet Date: Tue, 23 Jul 2013 15:19:36 +0200 Subject: [PATCH] 413531 - Introduce pluggable transports for HttpClient. Merge of the branch 'http_client_transport' is now complete, and the implementation is sound for the HTTP transport. A basic implementation for the SPDY transport exists, but needs improvements. --- .../org/eclipse/jetty/client/HttpClient.java | 16 ---------------- .../jetty/client/HttpClientTransport.java | 2 ++ .../eclipse/jetty/client/HttpDestination.java | 2 +- .../client/http/HttpClientTransportOverHTTP.java | 13 +++++++++++++ .../client/http/HttpClientTransportOverSPDY.java | 6 ++++++ 5 files changed, 22 insertions(+), 17 deletions(-) diff --git a/jetty-client/src/main/java/org/eclipse/jetty/client/HttpClient.java b/jetty-client/src/main/java/org/eclipse/jetty/client/HttpClient.java index b31a82361e4..5e1f429fb15 100644 --- a/jetty-client/src/main/java/org/eclipse/jetty/client/HttpClient.java +++ b/jetty-client/src/main/java/org/eclipse/jetty/client/HttpClient.java @@ -914,22 +914,6 @@ public class HttpClient extends ContainerLifeCycle dump(out, indent, getBeans(), destinations.values()); } - protected Connection tunnel(Connection connection) - { - // TODO -/* - HttpConnection httpConnection = (HttpConnection)connection; - HttpDestination destination = httpConnection.getHttpDestination(); - SslConnection sslConnection = createSslConnection(destination, httpConnection.getEndPoint()); - Connection result = (Connection)sslConnection.getDecryptedEndPoint().getConnection(); - selectorManager.connectionClosed(httpConnection); - selectorManager.connectionOpened(sslConnection); - LOG.debug("Tunnelled {} over {}", connection, result); - return result; -*/ - return connection; - } - private class ContentDecoderFactorySet implements Set { private final Set set = new HashSet<>(); diff --git a/jetty-client/src/main/java/org/eclipse/jetty/client/HttpClientTransport.java b/jetty-client/src/main/java/org/eclipse/jetty/client/HttpClientTransport.java index 80d165e1759..80d284c0d73 100644 --- a/jetty-client/src/main/java/org/eclipse/jetty/client/HttpClientTransport.java +++ b/jetty-client/src/main/java/org/eclipse/jetty/client/HttpClientTransport.java @@ -30,4 +30,6 @@ public interface HttpClientTransport HttpDestination newHttpDestination(HttpClient httpClient, String scheme, String host, int port); void connect(HttpDestination destination, SocketAddress address, Promise promise); + + Connection tunnel(Connection connection); } diff --git a/jetty-client/src/main/java/org/eclipse/jetty/client/HttpDestination.java b/jetty-client/src/main/java/org/eclipse/jetty/client/HttpDestination.java index 5f1350827c6..e328e02d6b5 100644 --- a/jetty-client/src/main/java/org/eclipse/jetty/client/HttpDestination.java +++ b/jetty-client/src/main/java/org/eclipse/jetty/client/HttpDestination.java @@ -330,7 +330,7 @@ public abstract class HttpDestination implements Destination, Closeable, Dumpabl if (response.getStatus() == 200) { // Wrap the connection with TLS - Connection tunnel = client.tunnel(connection); + Connection tunnel = client.getTransport().tunnel(connection); delegate.succeeded(tunnel); } else diff --git a/jetty-client/src/main/java/org/eclipse/jetty/client/http/HttpClientTransportOverHTTP.java b/jetty-client/src/main/java/org/eclipse/jetty/client/http/HttpClientTransportOverHTTP.java index 86994a445ed..391e2c83c19 100644 --- a/jetty-client/src/main/java/org/eclipse/jetty/client/http/HttpClientTransportOverHTTP.java +++ b/jetty-client/src/main/java/org/eclipse/jetty/client/http/HttpClientTransportOverHTTP.java @@ -107,6 +107,19 @@ public class HttpClientTransportOverHTTP extends ContainerLifeCycle implements H } } + @Override + public org.eclipse.jetty.client.api.Connection tunnel(org.eclipse.jetty.client.api.Connection connection) + { + HttpConnectionOverHTTP httpConnection = (HttpConnectionOverHTTP)connection; + HttpDestination destination = httpConnection.getHttpDestination(); + SslConnection sslConnection = createSslConnection(destination, httpConnection.getEndPoint()); + HttpConnectionOverHTTP result = (HttpConnectionOverHTTP)sslConnection.getDecryptedEndPoint().getConnection(); + selectorManager.connectionClosed(httpConnection); + selectorManager.connectionOpened(sslConnection); + LOG.debug("Tunnelled {} over {}", connection, result); + return result; + } + protected void configure(HttpClient client, SocketChannel channel) throws SocketException { channel.socket().setTcpNoDelay(client.isTCPNoDelay()); diff --git a/jetty-spdy/spdy-http-client-transport/src/main/java/org/eclipse/jetty/spdy/client/http/HttpClientTransportOverSPDY.java b/jetty-spdy/spdy-http-client-transport/src/main/java/org/eclipse/jetty/spdy/client/http/HttpClientTransportOverSPDY.java index 1d5d1190893..2533b86bf12 100644 --- a/jetty-spdy/spdy-http-client-transport/src/main/java/org/eclipse/jetty/spdy/client/http/HttpClientTransportOverSPDY.java +++ b/jetty-spdy/spdy-http-client-transport/src/main/java/org/eclipse/jetty/spdy/client/http/HttpClientTransportOverSPDY.java @@ -87,4 +87,10 @@ public class HttpClientTransportOverSPDY implements HttpClientTransport } ); } + + @Override + public Connection tunnel(Connection connection) + { + throw new UnsupportedOperationException(); + } }