diff options
Diffstat (limited to 'jetty-http2/http2-http-client-transport')
4 files changed, 77 insertions, 3 deletions
diff --git a/jetty-http2/http2-http-client-transport/pom.xml b/jetty-http2/http2-http-client-transport/pom.xml index be073c272d..df28dd82e0 100644 --- a/jetty-http2/http2-http-client-transport/pom.xml +++ b/jetty-http2/http2-http-client-transport/pom.xml @@ -15,6 +15,38 @@ </properties> <build> + <plugins> + <plugin> + <artifactId>maven-dependency-plugin</artifactId> + <executions> + <execution> + <id>copy</id> + <phase>generate-resources</phase> + <goals> + <goal>copy</goal> + </goals> + <configuration> + <artifactItems> + <artifactItem> + <groupId>org.mortbay.jetty.alpn</groupId> + <artifactId>alpn-boot</artifactId> + <version>${alpn.version}</version> + <type>jar</type> + <overWrite>false</overWrite> + <outputDirectory>${project.build.directory}/alpn</outputDirectory> + </artifactItem> + </artifactItems> + </configuration> + </execution> + </executions> + </plugin> + <plugin> + <artifactId>maven-surefire-plugin</artifactId> + <configuration> + <argLine>-Xbootclasspath/p:${project.build.directory}/alpn/alpn-boot-${alpn.version}.jar</argLine> + </configuration> + </plugin> + </plugins> </build> <dependencies> diff --git a/jetty-http2/http2-http-client-transport/src/main/java/org/eclipse/jetty/http2/client/http/HttpClientTransportOverHTTP2.java b/jetty-http2/http2-http-client-transport/src/main/java/org/eclipse/jetty/http2/client/http/HttpClientTransportOverHTTP2.java index 82e4ba3f92..ea16c18fea 100644 --- a/jetty-http2/http2-http-client-transport/src/main/java/org/eclipse/jetty/http2/client/http/HttpClientTransportOverHTTP2.java +++ b/jetty-http2/http2-http-client-transport/src/main/java/org/eclipse/jetty/http2/client/http/HttpClientTransportOverHTTP2.java @@ -22,19 +22,24 @@ import java.io.IOException; import java.net.InetSocketAddress; import java.util.Map; +import org.eclipse.jetty.alpn.client.ALPNClientConnectionFactory; import org.eclipse.jetty.client.HttpClient; import org.eclipse.jetty.client.HttpClientTransport; import org.eclipse.jetty.client.HttpDestination; import org.eclipse.jetty.client.Origin; import org.eclipse.jetty.client.api.Connection; +import org.eclipse.jetty.http.HttpScheme; import org.eclipse.jetty.http2.api.Session; import org.eclipse.jetty.http2.client.HTTP2Client; +import org.eclipse.jetty.http2.client.HTTP2ClientConnectionFactory; import org.eclipse.jetty.io.ClientConnectionFactory; import org.eclipse.jetty.io.EndPoint; +import org.eclipse.jetty.io.ssl.SslClientConnectionFactory; import org.eclipse.jetty.util.Promise; import org.eclipse.jetty.util.annotation.ManagedAttribute; import org.eclipse.jetty.util.annotation.ManagedObject; import org.eclipse.jetty.util.component.ContainerLifeCycle; +import org.eclipse.jetty.util.ssl.SslContextFactory; @ManagedObject("The HTTP/2 client transport") public class HttpClientTransportOverHTTP2 extends ContainerLifeCycle implements HttpClientTransport @@ -68,7 +73,7 @@ public class HttpClientTransportOverHTTP2 extends ContainerLifeCycle implements addBean(client); super.doStart(); - this.connectionFactory = client.getClientConnectionFactory(); + this.connectionFactory = new HTTP2ClientConnectionFactory(); client.setClientConnectionFactory((endPoint, context) -> { HttpDestination destination = (HttpDestination)context.get(HTTP_DESTINATION_CONTEXT_KEY); @@ -128,13 +133,21 @@ public class HttpClientTransportOverHTTP2 extends ContainerLifeCycle implements } }; - client.connect(httpClient.getSslContextFactory(), address, listener, promise, context); + SslContextFactory sslContextFactory = null; + if (HttpScheme.HTTPS.is(destination.getScheme())) + sslContextFactory = httpClient.getSslContextFactory(); + + client.connect(sslContextFactory, address, listener, promise, context); } @Override public org.eclipse.jetty.io.Connection newConnection(EndPoint endPoint, Map<String, Object> context) throws IOException { - return connectionFactory.newConnection(endPoint, context); + ClientConnectionFactory factory = connectionFactory; + SslContextFactory sslContextFactory = (SslContextFactory)context.get(SslClientConnectionFactory.SSL_CONTEXT_FACTORY_CONTEXT_KEY); + if (sslContextFactory != null) + factory = new ALPNClientConnectionFactory(client.getExecutor(), factory, client.getProtocols()); + return factory.newConnection(endPoint, context); } protected HttpConnectionOverHTTP2 newHttpConnection(HttpDestination destination, Session session) diff --git a/jetty-http2/http2-http-client-transport/src/test/java/org/eclipse/jetty/http2/client/http/HttpClientTransportOverHTTP2Test.java b/jetty-http2/http2-http-client-transport/src/test/java/org/eclipse/jetty/http2/client/http/HttpClientTransportOverHTTP2Test.java index 40f322098c..7a061eca85 100644 --- a/jetty-http2/http2-http-client-transport/src/test/java/org/eclipse/jetty/http2/client/http/HttpClientTransportOverHTTP2Test.java +++ b/jetty-http2/http2-http-client-transport/src/test/java/org/eclipse/jetty/http2/client/http/HttpClientTransportOverHTTP2Test.java @@ -21,9 +21,13 @@ package org.eclipse.jetty.http2.client.http; import java.util.concurrent.Executor; import org.eclipse.jetty.client.HttpClient; +import org.eclipse.jetty.client.api.ContentResponse; +import org.eclipse.jetty.http.HttpStatus; import org.eclipse.jetty.http2.client.HTTP2Client; +import org.eclipse.jetty.util.ssl.SslContextFactory; import org.eclipse.jetty.util.thread.QueuedThreadPool; import org.junit.Assert; +import org.junit.Ignore; import org.junit.Test; public class HttpClientTransportOverHTTP2Test @@ -51,4 +55,24 @@ public class HttpClientTransportOverHTTP2Test Assert.assertTrue(http2Client.isStopped()); } + + @Ignore + @Test + public void testExternalServer() throws Exception + { + HTTP2Client http2Client = new HTTP2Client(); + SslContextFactory sslContextFactory = new SslContextFactory(); + HttpClient httpClient = new HttpClient(new HttpClientTransportOverHTTP2(http2Client), sslContextFactory); + Executor executor = new QueuedThreadPool(); + httpClient.setExecutor(executor); + + httpClient.start(); + +// ContentResponse response = httpClient.GET("https://http2.akamai.com/"); + ContentResponse response = httpClient.GET("https://webtide.com/"); + + Assert.assertEquals(HttpStatus.OK_200, response.getStatus()); + + httpClient.stop(); + } } diff --git a/jetty-http2/http2-http-client-transport/src/test/resources/jetty-logging.properties b/jetty-http2/http2-http-client-transport/src/test/resources/jetty-logging.properties new file mode 100644 index 0000000000..287d28319e --- /dev/null +++ b/jetty-http2/http2-http-client-transport/src/test/resources/jetty-logging.properties @@ -0,0 +1,5 @@ +org.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.StdErrLog +#org.eclipse.jetty.client.LEVEL=DEBUG +org.eclipse.jetty.http2.hpack.LEVEL=INFO +#org.eclipse.jetty.http2.LEVEL=DEBUG +#org.eclipse.jetty.io.ssl.LEVEL=DEBUG |