3939import io .vertx .core .http .HttpVersion ;
4040import io .vertx .core .net .JdkSSLEngineOptions ;
4141import io .vertx .core .net .KeyCertOptions ;
42+ import io .vertx .core .net .TCPSSLOptions ;
4243import io .vertx .core .net .TrafficShapingOptions ;
4344import io .vertx .core .net .TrustOptions ;
4445
4546@ SuppressWarnings ("OptionalIsPresent" )
4647public class HttpServerOptionsUtils {
4748
49+ private static final boolean JDK_SSL_BUFFER_POOLING = Boolean .getBoolean ("quarkus.http.server.ssl.jdk.bufferPooling" );
50+
4851 /**
4952 * When the http port is set to 0, replace it by this value to let Vert.x choose a random port
5053 */
@@ -172,6 +175,7 @@ private static void applySslConfigToHttpServerOptions(ServerSslConfig httpConfig
172175 serverOptions .setEnabledSecureTransportProtocols (sslConfig .protocols );
173176 serverOptions .setSsl (true );
174177 serverOptions .setSni (sslConfig .sni );
178+ setJdkHeapBufferPooling (serverOptions );
175179 }
176180
177181 /**
@@ -214,6 +218,7 @@ public static HttpServerOptions createSslOptionsForManagementInterface(Managemen
214218
215219 public static void applyTlsConfigurationToHttpServerOptions (TlsConfiguration bucket , HttpServerOptions serverOptions ) {
216220 serverOptions .setSsl (true );
221+ setJdkHeapBufferPooling (serverOptions );
217222
218223 KeyCertOptions keyStoreOptions = bucket .getKeyStoreOptions ();
219224 TrustOptions trustStoreOptions = bucket .getTrustStoreOptions ();
@@ -240,6 +245,20 @@ public static void applyTlsConfigurationToHttpServerOptions(TlsConfiguration buc
240245 serverOptions .setEnabledSecureTransportProtocols (other .getEnabledSecureTransportProtocols ());
241246 }
242247
248+ private static void setJdkHeapBufferPooling (TCPSSLOptions tcpSslOptions ) {
249+ if (!JDK_SSL_BUFFER_POOLING ) {
250+ return ;
251+ }
252+ var engineOption = tcpSslOptions .getSslEngineOptions ();
253+ if (engineOption == null ) {
254+ var jdkEngineOptions = new JdkSSLEngineOptions ();
255+ jdkEngineOptions .setPooledHeapBuffers (true );
256+ tcpSslOptions .setSslEngineOptions (jdkEngineOptions );
257+ } else if (engineOption instanceof JdkSSLEngineOptions jdkEngineOptions ) {
258+ jdkEngineOptions .setPooledHeapBuffers (true );
259+ }
260+ }
261+
243262 public static Optional <String > getCredential (Optional <String > password , Map <String , String > credentials ,
244263 Optional <String > passwordKey ) {
245264 if (password .isPresent ()) {
0 commit comments