From b6f2c869e539a5ce296794f452a23df33d795917 Mon Sep 17 00:00:00 2001 From: Lachlan Roberts Date: Thu, 29 Aug 2024 11:44:15 +1000 Subject: [PATCH] PR #12186 - Make HttpConnection internal and implement a public Upgrade interface Signed-off-by: Lachlan Roberts --- .../eclipse/jetty/client/HttpClientTest.java | 2 +- .../org/eclipse/jetty/http/HttpGenerator.java | 8 ++++++- .../org/eclipse/jetty/http/HttpParser.java | 2 +- .../jetty/http2/tests/HTTP2CServerTest.java | 2 +- .../java/org/eclipse/jetty/io/Connection.java | 5 +++++ .../src/main/java/module-info.java | 1 + .../jetty/server/AbstractConnector.java | 1 + .../server/ForwardedRequestCustomizer.java | 1 + .../jetty/server/HttpConnectionFactory.java | 1 + .../server/{ => internal}/HttpConnection.java | 22 ++++++++++++++++--- .../jetty/server/DelayedServerTest.java | 1 + .../jetty/server/ExtendedServerTest.java | 1 + .../ForwardedRequestCustomizerTest.java | 1 + .../jetty/server/HttpConnectionTest.java | 1 + .../jetty/server/HttpServerTestBase.java | 1 + .../jetty/server/ResponseCompleteTest.java | 1 + .../org/eclipse/jetty/server/ServerTest.java | 1 + .../SlowClientWithPipelinedRequestTest.java | 1 + .../org/eclipse/jetty/server/StopTest.java | 1 + .../server/handler/DelayedHandlerTest.java | 4 ++-- .../ssl/SniSslConnectionFactoryTest.java | 4 ++-- .../server/ssl/SslConnectionFactoryTest.java | 4 ++-- .../client/transport/ConnectionPoolTest.java | 2 +- .../jetty/ee10/servlet/ServletApiRequest.java | 19 ++++++++++------ .../ee10/test/GzipWithSendErrorTest.java | 2 +- .../jetty/ee11/servlet/ServletApiRequest.java | 20 +++++++++++------ .../ee11/test/GzipWithSendErrorTest.java | 2 +- .../org/eclipse/jetty/ee9/nested/Request.java | 2 +- .../jetty/ee9/test/GzipWithSendErrorTest.java | 2 +- 29 files changed, 83 insertions(+), 32 deletions(-) rename jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/{ => internal}/HttpConnection.java (98%) diff --git a/jetty-core/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientTest.java b/jetty-core/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientTest.java index 7d229d1d031..f76edcfd7e4 100644 --- a/jetty-core/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientTest.java +++ b/jetty-core/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientTest.java @@ -1865,7 +1865,7 @@ public class HttpClientTest extends AbstractHttpClientServerTest } }); // Close the parser to cause the issue. - org.eclipse.jetty.server.HttpConnection.getCurrentConnection().getParser().close(); + org.eclipse.jetty.server.internal.HttpConnection.getCurrentConnection().getParser().close(); } }); server.start(); diff --git a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/HttpGenerator.java b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/HttpGenerator.java index 595fb5f5df5..939c418ccf9 100644 --- a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/HttpGenerator.java +++ b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/HttpGenerator.java @@ -455,12 +455,18 @@ public class HttpGenerator } } - public void servletUpgrade() + public void upgrade() { _noContentResponse = false; _state = State.COMMITTED; } + @Deprecated(since = "12.1.0", forRemoval = true) + public void servletUpgrade() + { + upgrade(); + } + private void prepareChunk(ByteBuffer chunk, int remaining) { // if we need CRLF add this to header diff --git a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/HttpParser.java b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/HttpParser.java index 25f15c87ba8..5f91d39e5bd 100644 --- a/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/HttpParser.java +++ b/jetty-core/jetty-http/src/main/java/org/eclipse/jetty/http/HttpParser.java @@ -2023,7 +2023,7 @@ public class HttpParser _contentLength = -1; } - @Deprecated + @Deprecated(since = "12.1.0", forRemoval = true) public void servletUpgrade() { upgrade(); diff --git a/jetty-core/jetty-http2/jetty-http2-tests/src/test/java/org/eclipse/jetty/http2/tests/HTTP2CServerTest.java b/jetty-core/jetty-http2/jetty-http2-tests/src/test/java/org/eclipse/jetty/http2/tests/HTTP2CServerTest.java index 3d61be8aa01..13617566c88 100644 --- a/jetty-core/jetty-http2/jetty-http2-tests/src/test/java/org/eclipse/jetty/http2/tests/HTTP2CServerTest.java +++ b/jetty-core/jetty-http2/jetty-http2-tests/src/test/java/org/eclipse/jetty/http2/tests/HTTP2CServerTest.java @@ -42,9 +42,9 @@ import org.eclipse.jetty.io.Content; import org.eclipse.jetty.io.EndPoint; import org.eclipse.jetty.io.RetainableByteBuffer; import org.eclipse.jetty.server.Connector; -import org.eclipse.jetty.server.HttpConnection; import org.eclipse.jetty.server.HttpConnectionFactory; import org.eclipse.jetty.server.ServerConnector; +import org.eclipse.jetty.server.internal.HttpConnection; import org.eclipse.jetty.util.BufferUtil; import org.eclipse.jetty.util.IO; import org.eclipse.jetty.util.Utf8StringBuilder; diff --git a/jetty-core/jetty-io/src/main/java/org/eclipse/jetty/io/Connection.java b/jetty-core/jetty-io/src/main/java/org/eclipse/jetty/io/Connection.java index edbd16f2058..fff714bdc48 100644 --- a/jetty-core/jetty-io/src/main/java/org/eclipse/jetty/io/Connection.java +++ b/jetty-core/jetty-io/src/main/java/org/eclipse/jetty/io/Connection.java @@ -140,6 +140,11 @@ public interface Connection extends Closeable void onUpgradeTo(ByteBuffer buffer); } + interface Upgrade + { + void upgrade(); + } + /** *

A Listener for connection events.

*

Listeners can be added to a {@link Connection} to get open and close events. diff --git a/jetty-core/jetty-server/src/main/java/module-info.java b/jetty-core/jetty-server/src/main/java/module-info.java index 8f3ef3e0f50..949eca15a8f 100644 --- a/jetty-core/jetty-server/src/main/java/module-info.java +++ b/jetty-core/jetty-server/src/main/java/module-info.java @@ -28,4 +28,5 @@ module org.eclipse.jetty.server exports org.eclipse.jetty.server.jmx to org.eclipse.jetty.jmx; + exports org.eclipse.jetty.server.internal; } diff --git a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/AbstractConnector.java b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/AbstractConnector.java index 72391323943..5be4f03d2a3 100644 --- a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/AbstractConnector.java +++ b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/AbstractConnector.java @@ -37,6 +37,7 @@ import org.eclipse.jetty.io.ByteBufferPool; import org.eclipse.jetty.io.EndPoint; import org.eclipse.jetty.io.RetainableByteBuffer; import org.eclipse.jetty.io.ssl.SslConnection; +import org.eclipse.jetty.server.internal.HttpConnection; import org.eclipse.jetty.util.ProcessorUtils; import org.eclipse.jetty.util.StringUtil; import org.eclipse.jetty.util.annotation.ManagedAttribute; diff --git a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/ForwardedRequestCustomizer.java b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/ForwardedRequestCustomizer.java index 3237c648673..eddb9f7cfcf 100644 --- a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/ForwardedRequestCustomizer.java +++ b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/ForwardedRequestCustomizer.java @@ -29,6 +29,7 @@ import org.eclipse.jetty.http.HttpScheme; import org.eclipse.jetty.http.HttpURI; import org.eclipse.jetty.http.QuotedCSVParser; import org.eclipse.jetty.io.EndPoint; +import org.eclipse.jetty.server.internal.HttpConnection; import org.eclipse.jetty.util.Attributes; import org.eclipse.jetty.util.HostPort; import org.eclipse.jetty.util.Index; diff --git a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/HttpConnectionFactory.java b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/HttpConnectionFactory.java index 502131b53b9..30b5d9b5067 100644 --- a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/HttpConnectionFactory.java +++ b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/HttpConnectionFactory.java @@ -19,6 +19,7 @@ import org.eclipse.jetty.http.ComplianceViolation; import org.eclipse.jetty.http.HttpVersion; import org.eclipse.jetty.io.Connection; import org.eclipse.jetty.io.EndPoint; +import org.eclipse.jetty.server.internal.HttpConnection; import org.eclipse.jetty.util.annotation.Name; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/HttpConnection.java b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/internal/HttpConnection.java similarity index 98% rename from jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/HttpConnection.java rename to jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/internal/HttpConnection.java index 4a32932a5e1..50b6afb9397 100644 --- a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/HttpConnection.java +++ b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/internal/HttpConnection.java @@ -11,7 +11,7 @@ // ======================================================================== // -package org.eclipse.jetty.server; +package org.eclipse.jetty.server.internal; import java.io.IOException; import java.nio.ByteBuffer; @@ -53,7 +53,16 @@ import org.eclipse.jetty.io.EofException; import org.eclipse.jetty.io.RetainableByteBuffer; import org.eclipse.jetty.io.RuntimeIOException; import org.eclipse.jetty.io.ssl.SslConnection; -import org.eclipse.jetty.server.internal.HttpChannelState; +import org.eclipse.jetty.server.AbstractMetaDataConnection; +import org.eclipse.jetty.server.ConnectionFactory; +import org.eclipse.jetty.server.ConnectionMetaData; +import org.eclipse.jetty.server.Connector; +import org.eclipse.jetty.server.HttpChannel; +import org.eclipse.jetty.server.HttpConfiguration; +import org.eclipse.jetty.server.HttpStream; +import org.eclipse.jetty.server.Request; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.TunnelSupport; import org.eclipse.jetty.util.BufferUtil; import org.eclipse.jetty.util.Callback; import org.eclipse.jetty.util.HostPort; @@ -71,7 +80,7 @@ import static org.eclipse.jetty.http.HttpStatus.INTERNAL_SERVER_ERROR_500; /** *

A {@link Connection} that handles the HTTP protocol.

*/ -public class HttpConnection extends AbstractMetaDataConnection implements Runnable, Connection.UpgradeFrom, Connection.UpgradeTo, ConnectionMetaData +public class HttpConnection extends AbstractMetaDataConnection implements Runnable, Connection.UpgradeFrom, Connection.UpgradeTo, Connection.Upgrade, ConnectionMetaData { private static final Logger LOG = LoggerFactory.getLogger(HttpConnection.class); private static final HttpField PREAMBLE_UPGRADE_H2C = new HttpField(HttpHeader.UPGRADE, "h2c"); @@ -326,6 +335,13 @@ public class HttpConnection extends AbstractMetaDataConnection implements Runnab BufferUtil.append(getRequestBuffer(), buffer); } + @Override + public void upgrade() + { + getParser().upgrade(); + getGenerator().upgrade(); + } + void releaseRequestBuffer() { if (_retainableByteBuffer != null && _retainableByteBuffer.isEmpty()) diff --git a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/DelayedServerTest.java b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/DelayedServerTest.java index d20abd8cb27..3a1ec920d76 100644 --- a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/DelayedServerTest.java +++ b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/DelayedServerTest.java @@ -19,6 +19,7 @@ import org.eclipse.jetty.http.HttpVersion; import org.eclipse.jetty.http.MetaData; import org.eclipse.jetty.io.Connection; import org.eclipse.jetty.io.EndPoint; +import org.eclipse.jetty.server.internal.HttpConnection; import org.eclipse.jetty.util.Callback; import org.junit.jupiter.api.BeforeEach; diff --git a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/ExtendedServerTest.java b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/ExtendedServerTest.java index 67ac2eaae95..7d9aa6812f8 100644 --- a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/ExtendedServerTest.java +++ b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/ExtendedServerTest.java @@ -25,6 +25,7 @@ import org.eclipse.jetty.io.EndPoint; import org.eclipse.jetty.io.ManagedSelector; import org.eclipse.jetty.io.SocketChannelEndPoint; import org.eclipse.jetty.server.internal.HttpChannelState; +import org.eclipse.jetty.server.internal.HttpConnection; import org.eclipse.jetty.util.BufferUtil; import org.eclipse.jetty.util.Callback; import org.eclipse.jetty.util.NanoTime; diff --git a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/ForwardedRequestCustomizerTest.java b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/ForwardedRequestCustomizerTest.java index ae588464a39..2b8b97036a4 100644 --- a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/ForwardedRequestCustomizerTest.java +++ b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/ForwardedRequestCustomizerTest.java @@ -26,6 +26,7 @@ import org.eclipse.jetty.http.HttpCompliance; import org.eclipse.jetty.http.HttpTester; import org.eclipse.jetty.io.Connection; import org.eclipse.jetty.io.EndPoint; +import org.eclipse.jetty.server.internal.HttpConnection; import org.eclipse.jetty.util.Callback; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; diff --git a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/HttpConnectionTest.java b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/HttpConnectionTest.java index fc078af5030..b93a6daa100 100644 --- a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/HttpConnectionTest.java +++ b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/HttpConnectionTest.java @@ -46,6 +46,7 @@ import org.eclipse.jetty.http.UriCompliance; import org.eclipse.jetty.io.Content; import org.eclipse.jetty.logging.StacklessLogging; import org.eclipse.jetty.server.handler.DumpHandler; +import org.eclipse.jetty.server.internal.HttpConnection; import org.eclipse.jetty.util.BufferUtil; import org.eclipse.jetty.util.Callback; import org.eclipse.jetty.util.NanoTime; diff --git a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/HttpServerTestBase.java b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/HttpServerTestBase.java index 77c18c6f3bd..8f1c60271b1 100644 --- a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/HttpServerTestBase.java +++ b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/HttpServerTestBase.java @@ -48,6 +48,7 @@ import org.eclipse.jetty.io.EndPoint; import org.eclipse.jetty.logging.StacklessLogging; import org.eclipse.jetty.server.handler.EchoHandler; import org.eclipse.jetty.server.handler.HelloHandler; +import org.eclipse.jetty.server.internal.HttpConnection; import org.eclipse.jetty.util.Blocker; import org.eclipse.jetty.util.BufferUtil; import org.eclipse.jetty.util.Callback; diff --git a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/ResponseCompleteTest.java b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/ResponseCompleteTest.java index 4a9619cd358..482cfe2a1e5 100644 --- a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/ResponseCompleteTest.java +++ b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/ResponseCompleteTest.java @@ -26,6 +26,7 @@ import org.eclipse.jetty.http.HttpVersion; import org.eclipse.jetty.io.Connection; import org.eclipse.jetty.io.EndPoint; import org.eclipse.jetty.logging.StacklessLogging; +import org.eclipse.jetty.server.internal.HttpConnection; import org.eclipse.jetty.util.Callback; import org.eclipse.jetty.util.IO; import org.eclipse.jetty.util.component.LifeCycle; diff --git a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/ServerTest.java b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/ServerTest.java index dccc272d24d..dcca3eb0375 100644 --- a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/ServerTest.java +++ b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/ServerTest.java @@ -29,6 +29,7 @@ import org.eclipse.jetty.io.EndPoint; import org.eclipse.jetty.io.QuietException; import org.eclipse.jetty.server.handler.ContextHandler; import org.eclipse.jetty.server.internal.HttpChannelState; +import org.eclipse.jetty.server.internal.HttpConnection; import org.eclipse.jetty.util.Blocker; import org.eclipse.jetty.util.Callback; import org.eclipse.jetty.util.Jetty; diff --git a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/SlowClientWithPipelinedRequestTest.java b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/SlowClientWithPipelinedRequestTest.java index 959272f227b..12069ad7e15 100644 --- a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/SlowClientWithPipelinedRequestTest.java +++ b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/SlowClientWithPipelinedRequestTest.java @@ -23,6 +23,7 @@ import java.util.concurrent.atomic.AtomicInteger; import org.eclipse.jetty.io.Connection; import org.eclipse.jetty.io.EndPoint; +import org.eclipse.jetty.server.internal.HttpConnection; import org.eclipse.jetty.util.Callback; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; diff --git a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/StopTest.java b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/StopTest.java index f044a2d6233..48bcf7e9a61 100644 --- a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/StopTest.java +++ b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/StopTest.java @@ -31,6 +31,7 @@ import org.eclipse.jetty.server.LocalConnector.LocalEndPoint; import org.eclipse.jetty.server.handler.ContextHandler; import org.eclipse.jetty.server.handler.ContextHandlerCollection; import org.eclipse.jetty.server.handler.StatisticsHandler; +import org.eclipse.jetty.server.internal.HttpConnection; import org.eclipse.jetty.util.BufferUtil; import org.eclipse.jetty.util.Callback; import org.eclipse.jetty.util.FutureCallback; diff --git a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/DelayedHandlerTest.java b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/DelayedHandlerTest.java index 4b0daad8986..88c213a3132 100644 --- a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/DelayedHandlerTest.java +++ b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/handler/DelayedHandlerTest.java @@ -298,7 +298,7 @@ public class DelayedHandlerTest ByteArrayOutputStream out = new ByteArrayOutputStream(8192); new Throwable().printStackTrace(new PrintStream(out)); String stack = out.toString(StandardCharsets.ISO_8859_1); - assertThat(stack, containsString("org.eclipse.jetty.server.HttpConnection.onFillable")); + assertThat(stack, containsString("org.eclipse.jetty.server.internal.HttpConnection.onFillable")); assertThat(stack, containsString("org.eclipse.jetty.server.handler.DelayedHandler.handle")); // Check the content is available @@ -469,7 +469,7 @@ public class DelayedHandlerTest ByteArrayOutputStream out = new ByteArrayOutputStream(8192); new Throwable().printStackTrace(new PrintStream(out)); String stack = out.toString(StandardCharsets.ISO_8859_1); - assertThat(stack, containsString("org.eclipse.jetty.server.HttpConnection.onFillable")); + assertThat(stack, containsString("org.eclipse.jetty.server.internal.HttpConnection.onFillable")); assertThat(stack, containsString("org.eclipse.jetty.server.handler.DelayedHandler.handle")); Fields fields = FormFields.from(request).get(1, TimeUnit.NANOSECONDS); diff --git a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/ssl/SniSslConnectionFactoryTest.java b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/ssl/SniSslConnectionFactoryTest.java index d833123926b..46784e2434e 100644 --- a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/ssl/SniSslConnectionFactoryTest.java +++ b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/ssl/SniSslConnectionFactoryTest.java @@ -494,8 +494,8 @@ public class SniSslConnectionFactoryTest assertEquals("customize connector class org.eclipse.jetty.io.ssl.SslConnection,false", history.poll()); assertEquals("customize ssl class org.eclipse.jetty.io.ssl.SslConnection,false", history.poll()); - assertEquals("customize connector class org.eclipse.jetty.server.HttpConnection,true", history.poll()); - assertEquals("customize http class org.eclipse.jetty.server.HttpConnection,true", history.poll()); + assertEquals("customize connector class org.eclipse.jetty.server.internal.HttpConnection,true", history.poll()); + assertEquals("customize http class org.eclipse.jetty.server.internal.HttpConnection,true", history.poll()); assertEquals(0, history.size()); } diff --git a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/ssl/SslConnectionFactoryTest.java b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/ssl/SslConnectionFactoryTest.java index 04f4aef7305..ebe49e17e0e 100644 --- a/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/ssl/SslConnectionFactoryTest.java +++ b/jetty-core/jetty-server/src/test/java/org/eclipse/jetty/server/ssl/SslConnectionFactoryTest.java @@ -178,8 +178,8 @@ public class SslConnectionFactoryTest assertEquals("customize connector class org.eclipse.jetty.io.ssl.SslConnection,false", history.poll()); assertEquals("customize ssl class org.eclipse.jetty.io.ssl.SslConnection,false", history.poll()); - assertEquals("customize connector class org.eclipse.jetty.server.HttpConnection,true", history.poll()); - assertEquals("customize http class org.eclipse.jetty.server.HttpConnection,true", history.poll()); + assertEquals("customize connector class org.eclipse.jetty.server.internal.HttpConnection,true", history.poll()); + assertEquals("customize http class org.eclipse.jetty.server.internal.HttpConnection,true", history.poll()); assertEquals(0, history.size()); } diff --git a/jetty-core/jetty-tests/jetty-test-client-transports/src/test/java/org/eclipse/jetty/test/client/transport/ConnectionPoolTest.java b/jetty-core/jetty-tests/jetty-test-client-transports/src/test/java/org/eclipse/jetty/test/client/transport/ConnectionPoolTest.java index 1f2c4ee6092..a634883faea 100644 --- a/jetty-core/jetty-tests/jetty-test-client-transports/src/test/java/org/eclipse/jetty/test/client/transport/ConnectionPoolTest.java +++ b/jetty-core/jetty-tests/jetty-test-client-transports/src/test/java/org/eclipse/jetty/test/client/transport/ConnectionPoolTest.java @@ -24,7 +24,7 @@ import org.eclipse.jetty.http2.server.internal.HTTP2ServerConnection; import org.eclipse.jetty.io.Connection; import org.eclipse.jetty.io.ssl.SslConnection; import org.eclipse.jetty.quic.server.ServerQuicConnection; -import org.eclipse.jetty.server.HttpConnection; +import org.eclipse.jetty.server.internal.HttpConnection; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; diff --git a/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ServletApiRequest.java b/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ServletApiRequest.java index 7d0acef79c6..b07044e071f 100644 --- a/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ServletApiRequest.java +++ b/jetty-ee10/jetty-ee10-servlet/src/main/java/org/eclipse/jetty/ee10/servlet/ServletApiRequest.java @@ -78,6 +78,7 @@ import org.eclipse.jetty.http.HttpVersion; import org.eclipse.jetty.http.MimeTypes; import org.eclipse.jetty.http.SetCookieParser; import org.eclipse.jetty.http.pathmap.MatchedResource; +import org.eclipse.jetty.io.Connection; import org.eclipse.jetty.io.QuietException; import org.eclipse.jetty.io.RuntimeIOException; import org.eclipse.jetty.security.AuthenticationState; @@ -85,7 +86,6 @@ import org.eclipse.jetty.security.UserIdentity; import org.eclipse.jetty.server.ConnectionMetaData; import org.eclipse.jetty.server.CookieCache; import org.eclipse.jetty.server.FormFields; -import org.eclipse.jetty.server.HttpConnection; import org.eclipse.jetty.server.HttpCookieUtils; import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.Response; @@ -951,13 +951,18 @@ public class ServletApiRequest implements HttpServletRequest throw new ServletException("Unable to instantiate handler class", e); } - HttpConnection httpConnection = (HttpConnection)_servletContextRequest.getConnectionMetaData().getConnection(); - httpConnection.getParser().upgrade(); + Connection connection = _servletContextRequest.getConnectionMetaData().getConnection(); + if (connection instanceof Connection.Upgrade upgradeableConnection) + { + outputStream.flush(); // commit the 101 response + upgradeableConnection.upgrade(); + } + else + { + LOG.warn("Unexpected connection type {}", connection); + throw new IllegalStateException(); + } AsyncContext asyncContext = forceStartAsync(); // force the servlet in async mode - - outputStream.flush(); // commit the 101 response - httpConnection.getGenerator().servletUpgrade(); // tell the generator it can send data as-is - CompletableFuture.allOf(inputStreamComplete, outputStreamComplete).whenComplete((result, failure) -> { upgradeHandler.destroy(); diff --git a/jetty-ee10/jetty-ee10-tests/jetty-ee10-test-integration/src/test/java/org/eclipse/jetty/ee10/test/GzipWithSendErrorTest.java b/jetty-ee10/jetty-ee10-tests/jetty-ee10-test-integration/src/test/java/org/eclipse/jetty/ee10/test/GzipWithSendErrorTest.java index 63d851f604d..67c5bfb08e4 100644 --- a/jetty-ee10/jetty-ee10-tests/jetty-ee10-test-integration/src/test/java/org/eclipse/jetty/ee10/test/GzipWithSendErrorTest.java +++ b/jetty-ee10/jetty-ee10-tests/jetty-ee10-test-integration/src/test/java/org/eclipse/jetty/ee10/test/GzipWithSendErrorTest.java @@ -44,10 +44,10 @@ import org.eclipse.jetty.ee10.servlet.ServletContextHandler; import org.eclipse.jetty.ee10.servlet.ServletContextRequest; import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.http.HttpMethod; -import org.eclipse.jetty.server.HttpConnection; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.ServerConnector; import org.eclipse.jetty.server.handler.gzip.GzipHandler; +import org.eclipse.jetty.server.internal.HttpConnection; import org.eclipse.jetty.toolchain.test.MavenTestingUtils; import org.eclipse.jetty.util.Callback; import org.eclipse.jetty.util.IO; diff --git a/jetty-ee11/jetty-ee11-servlet/src/main/java/org/eclipse/jetty/ee11/servlet/ServletApiRequest.java b/jetty-ee11/jetty-ee11-servlet/src/main/java/org/eclipse/jetty/ee11/servlet/ServletApiRequest.java index 22168d2fe7c..935d20c6e02 100644 --- a/jetty-ee11/jetty-ee11-servlet/src/main/java/org/eclipse/jetty/ee11/servlet/ServletApiRequest.java +++ b/jetty-ee11/jetty-ee11-servlet/src/main/java/org/eclipse/jetty/ee11/servlet/ServletApiRequest.java @@ -78,6 +78,7 @@ import org.eclipse.jetty.http.HttpVersion; import org.eclipse.jetty.http.MimeTypes; import org.eclipse.jetty.http.SetCookieParser; import org.eclipse.jetty.http.pathmap.MatchedResource; +import org.eclipse.jetty.io.Connection; import org.eclipse.jetty.io.QuietException; import org.eclipse.jetty.io.RuntimeIOException; import org.eclipse.jetty.security.AuthenticationState; @@ -85,7 +86,6 @@ import org.eclipse.jetty.security.UserIdentity; import org.eclipse.jetty.server.ConnectionMetaData; import org.eclipse.jetty.server.CookieCache; import org.eclipse.jetty.server.FormFields; -import org.eclipse.jetty.server.HttpConnection; import org.eclipse.jetty.server.HttpCookieUtils; import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.Response; @@ -951,13 +951,19 @@ public class ServletApiRequest implements HttpServletRequest throw new ServletException("Unable to instantiate handler class", e); } - HttpConnection httpConnection = (HttpConnection)_servletContextRequest.getConnectionMetaData().getConnection(); - httpConnection.getParser().upgrade(); + Connection connection = _servletContextRequest.getConnectionMetaData().getConnection(); + if (connection instanceof Connection.Upgrade upgradeableConnection) + { + outputStream.flush(); // commit the 101 response + upgradeableConnection.upgrade(); + } + else + { + LOG.warn("Unexpected connection type {}", connection); + throw new IllegalStateException(); + } + AsyncContext asyncContext = forceStartAsync(); // force the servlet in async mode - - outputStream.flush(); // commit the 101 response - httpConnection.getGenerator().servletUpgrade(); // tell the generator it can send data as-is - CompletableFuture.allOf(inputStreamComplete, outputStreamComplete).whenComplete((result, failure) -> { upgradeHandler.destroy(); diff --git a/jetty-ee11/jetty-ee11-tests/jetty-ee11-test-integration/src/test/java/org/eclipse/jetty/ee11/test/GzipWithSendErrorTest.java b/jetty-ee11/jetty-ee11-tests/jetty-ee11-test-integration/src/test/java/org/eclipse/jetty/ee11/test/GzipWithSendErrorTest.java index 916adc57da3..7904acaf364 100644 --- a/jetty-ee11/jetty-ee11-tests/jetty-ee11-test-integration/src/test/java/org/eclipse/jetty/ee11/test/GzipWithSendErrorTest.java +++ b/jetty-ee11/jetty-ee11-tests/jetty-ee11-test-integration/src/test/java/org/eclipse/jetty/ee11/test/GzipWithSendErrorTest.java @@ -44,10 +44,10 @@ import org.eclipse.jetty.ee11.servlet.ServletContextHandler; import org.eclipse.jetty.ee11.servlet.ServletContextRequest; import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.http.HttpMethod; -import org.eclipse.jetty.server.HttpConnection; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.ServerConnector; import org.eclipse.jetty.server.handler.gzip.GzipHandler; +import org.eclipse.jetty.server.internal.HttpConnection; import org.eclipse.jetty.toolchain.test.MavenTestingUtils; import org.eclipse.jetty.util.Callback; import org.eclipse.jetty.util.IO; diff --git a/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/Request.java b/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/Request.java index cd87e996279..43e62a3ead0 100644 --- a/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/Request.java +++ b/jetty-ee9/jetty-ee9-nested/src/main/java/org/eclipse/jetty/ee9/nested/Request.java @@ -596,7 +596,7 @@ public class Request implements HttpServletRequest *
*
org.eclipse.jetty.server.Server
The Jetty Server instance
*
org.eclipse.jetty.server.HttpChannel
The HttpChannel for this request
- *
org.eclipse.jetty.server.HttpConnection
The HttpConnection or null if another transport is used
+ *
org.eclipse.jetty.server.internal.HttpConnection
The HttpConnection or null if another transport is used
*
* While these attributes may look like security problems, they are exposing nothing that is not already * available via reflection from a Request instance. diff --git a/jetty-ee9/jetty-ee9-tests/jetty-ee9-test-integration/src/test/java/org/eclipse/jetty/ee9/test/GzipWithSendErrorTest.java b/jetty-ee9/jetty-ee9-tests/jetty-ee9-test-integration/src/test/java/org/eclipse/jetty/ee9/test/GzipWithSendErrorTest.java index 46248a3a8a3..a640c74429f 100644 --- a/jetty-ee9/jetty-ee9-tests/jetty-ee9-test-integration/src/test/java/org/eclipse/jetty/ee9/test/GzipWithSendErrorTest.java +++ b/jetty-ee9/jetty-ee9-tests/jetty-ee9-test-integration/src/test/java/org/eclipse/jetty/ee9/test/GzipWithSendErrorTest.java @@ -41,10 +41,10 @@ import org.eclipse.jetty.ee9.nested.Request; import org.eclipse.jetty.ee9.servlet.ServletContextHandler; import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.http.HttpMethod; -import org.eclipse.jetty.server.HttpConnection; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.ServerConnector; import org.eclipse.jetty.server.handler.gzip.GzipHandler; +import org.eclipse.jetty.server.internal.HttpConnection; import org.eclipse.jetty.toolchain.test.MavenTestingUtils; import org.eclipse.jetty.util.Callback; import org.eclipse.jetty.util.IO;