Skip to content

Commit 32581dd

Browse files
author
Thierry Boileau
committed
Fix Jetty HTTP3 server
1 parent 69da540 commit 32581dd

6 files changed

Lines changed: 48 additions & 17 deletions

File tree

org.restlet.java/org.restlet.ext.jetty/src/main/java/org/restlet/ext/jetty/HttpsServerHelper.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ protected List<Connector> createConnectors(org.eclipse.jetty.server.Server serve
9090
ServerConnector connector = createServerConnector(server, configuration);
9191
result.add(connector);
9292
} else if (httpTransportProtocols.contains(HttpTransportProtocol.HTTP3)) {
93-
ServerQuicConfiguration configuration = createQuicConfiguration(getServerSslContextFactory());
93+
ServerQuicConfiguration configuration = createQuicConfiguration(getQuicServerSslContextFactory());
9494
QuicServerConnector connector = createQuicServerConnector(server, configuration);
9595
result.add(connector);
9696
}
@@ -175,6 +175,27 @@ private SslContextFactory.Server getServerSslContextFactory() {
175175
}
176176
}
177177

178+
private SslContextFactory.Server getQuicServerSslContextFactory() {
179+
SslContextFactory.Server sslContextFactory = new SslContextFactory.Server();
180+
181+
sslContextFactory.setKeyStorePassword(getHelpedParameters().getFirstValue("keyStorePassword", true,
182+
System.getProperty("javax.net.ssl.keyStorePassword", "")));
183+
sslContextFactory.setKeyStorePath(
184+
getHelpedParameters().getFirstValue("keyStorePath", true, System.getProperty("javax.net.ssl.keyStore")));
185+
sslContextFactory.setKeyStoreType(
186+
getHelpedParameters().getFirstValue("keyStoreType", true, System.getProperty("javax.net.ssl.keyStoreType")));
187+
sslContextFactory.setProtocol(getHelpedParameters().getFirstValue("protocol", true, "TLS"));
188+
sslContextFactory.setSecureRandomAlgorithm(getHelpedParameters().getFirstValue("secureRandomAlgorithm", true));
189+
sslContextFactory.setTrustStorePassword(getHelpedParameters().getFirstValue("trustStorePassword", true,
190+
System.getProperty("javax.net.ssl.trustStorePassword")));
191+
sslContextFactory.setTrustStorePath(
192+
getHelpedParameters().getFirstValue("trustStorePath", true, System.getProperty("javax.net.ssl.trustStore")));
193+
sslContextFactory.setTrustStoreType(getHelpedParameters().getFirstValue("trustStoreType", true,
194+
System.getProperty("javax.net.ssl.trustStoreType")));
195+
196+
return sslContextFactory;
197+
}
198+
178199
private ServerQuicConfiguration createQuicConfiguration(SslContextFactory.Server sslContextFactory) {
179200
Path pemWorkDirectory = getHttp3PemWorkDirectoryPath();
180201
ServerQuicConfiguration configuration = new ServerQuicConfiguration(sslContextFactory, pemWorkDirectory);

org.restlet.java/org.restlet.ext.jetty/src/main/java/org/restlet/ext/jetty/JettyServerHelper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -724,7 +724,7 @@ protected void setWrappedServer(org.eclipse.jetty.server.Server wrappedServer) {
724724
public void start() throws Exception {
725725
super.start();
726726
org.eclipse.jetty.server.Server server = getWrappedServer();
727-
ServerConnector connector = (ServerConnector) server.getConnectors()[0];
727+
AbstractNetworkConnector connector = (AbstractNetworkConnector) server.getConnectors()[0];
728728

729729
getLogger().info("Starting the Jetty " + getProtocols() + " server on port " + getHelped().getPort());
730730
try {

org.restlet.java/org.restlet.ext.jetty/src/main/java/org/restlet/ext/jetty/internal/JettyServerCall.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import org.restlet.Server;
2121
import org.restlet.data.Header;
2222
import org.restlet.engine.adapter.ServerCall;
23+
import org.restlet.engine.header.HeaderConstants;
2324
import org.restlet.util.Series;
2425

2526
import java.io.IOException;
@@ -174,6 +175,16 @@ public InputStream getRequestEntityStream(long size) {
174175
return Request.asInputStream(getRequest());
175176
}
176177

178+
@Override
179+
public String getHostDomain() {
180+
return request.getHttpURI().getHost();
181+
}
182+
183+
@Override
184+
public int getHostPort() {
185+
return request.getHttpURI().getPort();
186+
}
187+
177188
@Override
178189
public Series<Header> getRequestHeaders() {
179190
final Series<Header> result = super.getRequestHeaders();

org.restlet.java/org.restlet.ext.jetty/src/test/java/org/restlet/ext/jetty/connectors/SslBaseConnectorsTestCase.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,13 +90,13 @@ protected void configureSslClientParameters(final Client client) {
9090
protected void configureSslServerParameters(final Server server) {
9191
Series<Parameter> parameters = server.getContext().getParameters();
9292

93-
parameters.add("keystorePath", testKeystoreFile.getPath());
94-
parameters.add("keystorePassword", KEYSTORE_PASSWORD);
93+
parameters.add("keyStorePath", testKeystoreFile.getPath());
94+
parameters.add("keyStorePassword", KEYSTORE_PASSWORD);
9595
parameters.add("keyStoreType", KEYSTORE_TYPE);
9696
parameters.add("keyPassword", KEYSTORE_PASSWORD);
9797

98-
parameters.add("truststorePath", testKeystoreFile.getPath());
99-
parameters.add("truststorePassword", KEYSTORE_PASSWORD);
98+
parameters.add("trustStorePath", testKeystoreFile.getPath());
99+
parameters.add("trustStorePassword", KEYSTORE_PASSWORD);
100100
parameters.add("trustStoreType", KEYSTORE_TYPE);
101101

102102
if (shouldDebug()) {

org.restlet.java/org.restlet/src/main/java/org/restlet/Request.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -417,7 +417,7 @@ public Series<Cookie> getCookies() {
417417

418418
/**
419419
* Returns the host reference. This may be different from the resourceRef's
420-
* host, for example for URNs and other URIs that don't contain host
420+
* host, for example, for URNs and other URIs that don't contain host
421421
* information.<br>
422422
* <br>
423423
* Note that when used with HTTP connectors, this property maps to the "Host"
@@ -738,7 +738,7 @@ public void setHostRef(Reference hostRef) {
738738
}
739739

740740
/**
741-
* Sets the host reference using an URI string. Note that when used with HTTP
741+
* Sets the host reference using a URI string. Note that when used with HTTP
742742
* connectors, this property maps to the "Host" header.
743743
*
744744
* @param hostUri The host URI.

org.restlet.java/org.restlet/src/main/java/org/restlet/engine/adapter/ServerCall.java

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ public Representation getRequestEntity() {
152152
Representation result;
153153
long contentLength = getContentLength();
154154
boolean chunkedEncoding = HeaderUtils.isChunkedEncoding(getRequestHeaders());
155-
// In some cases there is an entity without a content-length header
155+
// In some cases, there is an entity without a content-length header
156156
boolean connectionClosed = HeaderUtils.isConnectionClose(getRequestHeaders());
157157

158158
// Create the representation
@@ -177,13 +177,12 @@ public Representation getRequestEntity() {
177177
}
178178
} catch (IOException e) {
179179
getLogger().fine("Unable to read request entity");
180-
181-
if(pbi != null)
182-
try {
183-
pbi.close();
184-
} catch (IOException e1) {
185-
getLogger().fine("Unable to close request entity");
186-
}
180+
181+
try {
182+
pbi.close();
183+
} catch (IOException e1) {
184+
getLogger().fine("Unable to close request entity");
185+
}
187186
}
188187
}
189188

@@ -306,7 +305,7 @@ private void parseHost() {
306305

307306
if (colonIndex != -1) {
308307
super.setHostDomain(host.substring(0, colonIndex));
309-
super.setHostPort(Integer.valueOf(host.substring(colonIndex + 1)));
308+
super.setHostPort(Integer.parseInt(host.substring(colonIndex + 1)));
310309
} else {
311310
super.setHostDomain(host);
312311
super.setHostPort(getProtocol().getDefaultPort());

0 commit comments

Comments
 (0)