diff --git a/.circleci/config.yml b/.circleci/config.yml
index 1f63027f7..dd397e8ad 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -145,7 +145,7 @@ jobs:
default: 'false'
graalvm-version:
type: 'string'
- default: '21.0.2-graalce'
+ default: '25-graalce'
resource_class:
type: 'string'
default: 'medium'
@@ -213,7 +213,7 @@ jobs:
default: 'false'
graalvm-version:
type: 'string'
- default: '21.0.2-graalce'
+ default: '25-graalce'
resource_class:
type: 'string'
default: 'medium'
@@ -269,7 +269,7 @@ jobs:
- setup_remote_docker
- install-sdk:
sdk: 'java'
- version: '21.0.2-graalce'
+ version: '25-graalce'
- start-db
- load_cache
- run:
@@ -293,7 +293,7 @@ jobs:
- setup_remote_docker
- install-sdk:
sdk: 'java'
- version: '21.0.2-graalce'
+ version: '25-graalce'
- start-db
- load_cache
- install
@@ -543,6 +543,7 @@ workflows:
- 'true'
- 'false'
graalvm-version:
+ - '25-graalce'
- '21.0.2-graalce'
filters:
tags:
@@ -563,6 +564,7 @@ workflows:
- 'true'
- 'false'
graalvm-version:
+ - '25-graalce'
- '21.0.2-graalce'
filters:
tags:
diff --git a/core/src/main/java/com/arangodb/internal/serde/SerdeUtils.java b/core/src/main/java/com/arangodb/internal/serde/SerdeUtils.java
index 7f652a745..2d7ad5935 100644
--- a/core/src/main/java/com/arangodb/internal/serde/SerdeUtils.java
+++ b/core/src/main/java/com/arangodb/internal/serde/SerdeUtils.java
@@ -58,7 +58,7 @@ static void checkSupportedJacksonVersion() {
).forEach(version -> {
int major = version.getMajorVersion();
int minor = version.getMinorVersion();
- if (major != 2 || minor < 10 || minor > 19) {
+ if (major != 2 || minor < 10 || minor > 20) {
LOGGER.warn("Unsupported Jackson version: {}", version);
}
});
diff --git a/pom.xml b/pom.xml
index c0905b99d..64c407910 100644
--- a/pom.xml
+++ b/pom.xml
@@ -41,7 +41,7 @@
arangodb-1
target/spotbugsXml.xml
site/jacoco/jacoco.xml
- 24.2.1
+ 25.0.0
@@ -92,7 +92,7 @@
io.vertx
vertx-stack-depchain
- 4.5.7
+ 4.5.21
pom
import
@@ -208,7 +208,7 @@
org.codehaus.mojo
extra-enforcer-rules
- 1.10.0
+ 1.11.0
@@ -245,6 +245,15 @@
+
+ org.junit.jupiter
+
+
+ regex
+ 6..*
+
+
+
diff --git a/shaded/src/main/java/graal/netty/graal/NettySubstitutions.java b/shaded/src/main/java/graal/netty/graal/NettySubstitutions.java
index 4eab2181b..d910cf1e7 100644
--- a/shaded/src/main/java/graal/netty/graal/NettySubstitutions.java
+++ b/shaded/src/main/java/graal/netty/graal/NettySubstitutions.java
@@ -1,45 +1,71 @@
package graal.netty.graal;
+import static io.netty.handler.codec.http.HttpHeaderValues.BR;
+import static io.netty.handler.codec.http.HttpHeaderValues.DEFLATE;
+import static io.netty.handler.codec.http.HttpHeaderValues.GZIP;
+import static io.netty.handler.codec.http.HttpHeaderValues.X_DEFLATE;
+import static io.netty.handler.codec.http.HttpHeaderValues.X_GZIP;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.ByteBuffer;
+import java.security.InvalidAlgorithmParameterException;
+import java.security.KeyException;
+import java.security.NoSuchAlgorithmException;
+import java.security.PrivateKey;
+import java.security.Provider;
+import java.security.SecureRandom;
+import java.security.cert.X509Certificate;
+import java.security.spec.InvalidKeySpecException;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Queue;
+import java.util.Set;
+import java.util.concurrent.LinkedBlockingDeque;
+import java.util.function.BooleanSupplier;
+
+import javax.crypto.NoSuchPaddingException;
+import javax.net.ssl.KeyManagerFactory;
+import javax.net.ssl.SSLEngine;
+import javax.net.ssl.SSLException;
+import javax.net.ssl.TrustManagerFactory;
+
import com.oracle.svm.core.annotate.Alias;
import com.oracle.svm.core.annotate.RecomputeFieldValue;
import com.oracle.svm.core.annotate.RecomputeFieldValue.Kind;
import com.oracle.svm.core.annotate.Substitute;
import com.oracle.svm.core.annotate.TargetClass;
+
import graal.netty.EmptyByteBufStub;
import io.netty.bootstrap.AbstractBootstrapConfig;
import io.netty.bootstrap.ChannelFactory;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufAllocator;
-import io.netty.channel.*;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.DefaultChannelPromise;
import io.netty.channel.embedded.EmbeddedChannel;
+import io.netty.handler.codec.compression.Brotli;
+import io.netty.handler.codec.compression.BrotliDecoder;
import io.netty.handler.codec.compression.ZlibCodecFactory;
import io.netty.handler.codec.compression.ZlibWrapper;
-import io.netty.handler.codec.http.HttpHeaderValues;
import io.netty.handler.codec.http2.Http2Exception;
-import io.netty.handler.ssl.*;
+import io.netty.handler.ssl.ApplicationProtocolConfig;
import io.netty.handler.ssl.ApplicationProtocolConfig.SelectorFailureBehavior;
+import io.netty.handler.ssl.CipherSuiteFilter;
+import io.netty.handler.ssl.ClientAuth;
+import io.netty.handler.ssl.JdkAlpnApplicationProtocolNegotiator;
+import io.netty.handler.ssl.JdkApplicationProtocolNegotiator;
+import io.netty.handler.ssl.SslContext;
+import io.netty.handler.ssl.SslContextOption;
+import io.netty.handler.ssl.SslProvider;
import io.netty.util.concurrent.GlobalEventExecutor;
import io.netty.util.internal.logging.InternalLoggerFactory;
import io.netty.util.internal.logging.JdkLoggerFactory;
-import javax.crypto.NoSuchPaddingException;
-import javax.net.ssl.KeyManagerFactory;
-import javax.net.ssl.SSLEngine;
-import javax.net.ssl.SSLException;
-import javax.net.ssl.TrustManagerFactory;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.ByteBuffer;
-import java.security.*;
-import java.security.cert.X509Certificate;
-import java.security.spec.InvalidKeySpecException;
-import java.util.*;
-import java.util.concurrent.LinkedBlockingDeque;
-import java.util.function.BooleanSupplier;
-
-import static io.netty.handler.codec.http.HttpHeaderValues.*;
-
/**
* This substitution avoid having loggers added to the build
*/
@@ -140,15 +166,14 @@ public static boolean isCipherSuiteAvailable(String cipherSuite) {
@TargetClass(className = "io.netty.handler.ssl.JdkSslServerContext")
final class Target_io_netty_handler_ssl_JdkSslServerContext {
-
@Alias
Target_io_netty_handler_ssl_JdkSslServerContext(Provider provider,
- X509Certificate[] trustCertCollection, TrustManagerFactory trustManagerFactory,
- X509Certificate[] keyCertChain, PrivateKey key, String keyPassword,
- KeyManagerFactory keyManagerFactory, Iterable ciphers, CipherSuiteFilter cipherFilter,
- ApplicationProtocolConfig apn, long sessionCacheSize, long sessionTimeout,
- ClientAuth clientAuth, String[] protocols, boolean startTls,
- String keyStore)
+ X509Certificate[] trustCertCollection, TrustManagerFactory trustManagerFactory,
+ X509Certificate[] keyCertChain, PrivateKey key, String keyPassword,
+ KeyManagerFactory keyManagerFactory, Iterable ciphers, CipherSuiteFilter cipherFilter,
+ ApplicationProtocolConfig apn, long sessionCacheSize, long sessionTimeout,
+ ClientAuth clientAuth, String[] protocols, boolean startTls,
+ SecureRandom secureRandom, String keyStore, Target_io_netty_handler_ssl_ResumptionController resumptionController)
throws SSLException {
}
}
@@ -157,15 +182,16 @@ final class Target_io_netty_handler_ssl_JdkSslServerContext {
final class Target_io_netty_handler_ssl_JdkSslClientContext {
@Alias
- Target_io_netty_handler_ssl_JdkSslClientContext(Provider sslContextProvider, X509Certificate[] trustCertCollection,
- TrustManagerFactory trustManagerFactory, X509Certificate[] keyCertChain, PrivateKey key,
- String keyPassword, KeyManagerFactory keyManagerFactory, Iterable ciphers,
- CipherSuiteFilter cipherFilter, ApplicationProtocolConfig apn, String[] protocols,
- long sessionCacheSize, long sessionTimeout, String keyStoreType)
- throws SSLException {
-
+ Target_io_netty_handler_ssl_JdkSslClientContext(Provider sslContextProvider,
+ X509Certificate[] trustCertCollection, TrustManagerFactory trustManagerFactory,
+ X509Certificate[] keyCertChain, PrivateKey key, String keyPassword,
+ KeyManagerFactory keyManagerFactory, Iterable ciphers, CipherSuiteFilter cipherFilter,
+ ApplicationProtocolConfig apn, String[] protocols, long sessionCacheSize, long sessionTimeout,
+ SecureRandom secureRandom, String keyStoreType, String endpointIdentificationAlgorithm,
+ Target_io_netty_handler_ssl_ResumptionController resumptionController) throws SSLException {
}
}
+
@TargetClass(className = "io.netty.handler.ssl.SslHandler$SslEngineType")
final class Target_io_netty_handler_ssl_SslHandler$SslEngineType {
@@ -182,7 +208,7 @@ final class Target_io_netty_handler_ssl_SslHandler$SslEngineType {
final class Target_io_netty_handler_ssl_JdkAlpnApplicationProtocolNegotiator_AlpnWrapper {
@Substitute
public SSLEngine wrapSslEngine(SSLEngine engine, ByteBufAllocator alloc,
- JdkApplicationProtocolNegotiator applicationNegotiator, boolean isServer) {
+ JdkApplicationProtocolNegotiator applicationNegotiator, boolean isServer) {
return (SSLEngine) (Object) new Target_io_netty_handler_ssl_JdkAlpnSslEngine(engine, applicationNegotiator,
isServer);
}
@@ -193,7 +219,16 @@ public SSLEngine wrapSslEngine(SSLEngine engine, ByteBufAllocator alloc,
final class Target_io_netty_handler_ssl_JdkAlpnSslEngine {
@Alias
Target_io_netty_handler_ssl_JdkAlpnSslEngine(final SSLEngine engine,
- final JdkApplicationProtocolNegotiator applicationNegotiator, final boolean isServer) {
+ final JdkApplicationProtocolNegotiator applicationNegotiator, final boolean isServer) {
+
+ }
+}
+
+@TargetClass(className = "io.netty.handler.ssl.ResumptionController")
+final class Target_io_netty_handler_ssl_ResumptionController {
+
+ @Alias
+ Target_io_netty_handler_ssl_ResumptionController() {
}
}
@@ -202,40 +237,46 @@ final class Target_io_netty_handler_ssl_JdkAlpnSslEngine {
final class Target_io_netty_handler_ssl_SslContext {
@Substitute
- static SslContext newServerContextInternal(SslProvider provider, Provider sslContextProvider,
- X509Certificate[] trustCertCollection, TrustManagerFactory trustManagerFactory,
- X509Certificate[] keyCertChain,
- PrivateKey key, String keyPassword, KeyManagerFactory keyManagerFactory, Iterable ciphers,
- CipherSuiteFilter cipherFilter, ApplicationProtocolConfig apn, long sessionCacheSize, long sessionTimeout,
- ClientAuth clientAuth, String[] protocols, boolean startTls, boolean enableOcsp, String keyStoreType,
- Map.Entry, Object>... ctxOptions) throws SSLException {
+ static SslContext newServerContextInternal(SslProvider provider,
+ Provider sslContextProvider,
+ X509Certificate[] trustCertCollection, TrustManagerFactory trustManagerFactory,
+ X509Certificate[] keyCertChain, PrivateKey key, String keyPassword, KeyManagerFactory keyManagerFactory,
+ Iterable ciphers, CipherSuiteFilter cipherFilter, ApplicationProtocolConfig apn,
+ long sessionCacheSize, long sessionTimeout, ClientAuth clientAuth, String[] protocols, boolean startTls,
+ boolean enableOcsp, SecureRandom secureRandom, String keyStoreType,
+ Map.Entry, Object>... ctxOptions) throws SSLException {
if (enableOcsp) {
throw new IllegalArgumentException("OCSP is not supported with this SslProvider: " + provider);
}
+ Target_io_netty_handler_ssl_ResumptionController resumptionController = new Target_io_netty_handler_ssl_ResumptionController();
return (SslContext) (Object) new Target_io_netty_handler_ssl_JdkSslServerContext(sslContextProvider,
trustCertCollection, trustManagerFactory, keyCertChain, key, keyPassword,
keyManagerFactory, ciphers, cipherFilter, apn, sessionCacheSize, sessionTimeout,
- clientAuth, protocols, startTls, keyStoreType);
+ clientAuth, protocols, startTls, secureRandom, keyStoreType, resumptionController);
}
@Substitute
- static SslContext newClientContextInternal(SslProvider provider, Provider sslContextProvider,
- X509Certificate[] trustCert,
- TrustManagerFactory trustManagerFactory, X509Certificate[] keyCertChain, PrivateKey key, String keyPassword,
- KeyManagerFactory keyManagerFactory, Iterable ciphers, CipherSuiteFilter cipherFilter,
- ApplicationProtocolConfig apn, String[] protocols, long sessionCacheSize, long sessionTimeout,
- boolean enableOcsp,
- String keyStoreType, Map.Entry, Object>... options) throws SSLException {
+ static SslContext newClientContextInternal(SslProvider provider,
+ Provider sslContextProvider,
+ X509Certificate[] trustCert, TrustManagerFactory trustManagerFactory,
+ X509Certificate[] keyCertChain, PrivateKey key, String keyPassword, KeyManagerFactory keyManagerFactory,
+ Iterable ciphers, CipherSuiteFilter cipherFilter, ApplicationProtocolConfig apn, String[] protocols,
+ long sessionCacheSize, long sessionTimeout, boolean enableOcsp,
+ SecureRandom secureRandom, String keyStoreType, String endpointIdentificationAlgorithm,
+ Map.Entry, Object>... options) throws SSLException {
if (enableOcsp) {
throw new IllegalArgumentException("OCSP is not supported with this SslProvider: " + provider);
}
+ Target_io_netty_handler_ssl_ResumptionController resumptionController = new Target_io_netty_handler_ssl_ResumptionController();
return (SslContext) (Object) new Target_io_netty_handler_ssl_JdkSslClientContext(sslContextProvider,
trustCert, trustManagerFactory, keyCertChain, key, keyPassword,
keyManagerFactory, ciphers, cipherFilter, apn, protocols, sessionCacheSize,
- sessionTimeout, keyStoreType);
+ sessionTimeout, secureRandom, keyStoreType, endpointIdentificationAlgorithm,
+ resumptionController);
}
}
+
@TargetClass(className = "io.netty.handler.ssl.JdkDefaultApplicationProtocolNegotiator")
final class Target_io_netty_handler_ssl_JdkDefaultApplicationProtocolNegotiator {
@@ -366,22 +407,6 @@ private static Queue newTaskQueue0(int maxPendingTasks) {
}
}
-@TargetClass(className = "io.netty.buffer.AbstractReferenceCountedByteBuf")
-final class Target_io_netty_buffer_AbstractReferenceCountedByteBuf {
-
- @Alias
- @RecomputeFieldValue(kind = Kind.FieldOffset, name = "refCnt")
- private static long REFCNT_FIELD_OFFSET;
-}
-
-@TargetClass(className = "io.netty.util.AbstractReferenceCounted")
-final class Target_io_netty_util_AbstractReferenceCounted {
-
- @Alias
- @RecomputeFieldValue(kind = Kind.FieldOffset, name = "refCnt")
- private static long REFCNT_FIELD_OFFSET;
-}
-
// This class is runtime-initialized by NettyProcessor
final class Holder_io_netty_util_concurrent_ScheduledFutureTask {
static final long START_TIME = System.nanoTime();
@@ -431,11 +456,11 @@ static Class> tryToLoadClass(final ClassLoader loader, final Class> helper)
final class Target_io_netty_buffer_EmptyByteBuf {
@Alias
- @RecomputeFieldValue(kind = Kind.Reset)
+ @RecomputeFieldValue(kind = RecomputeFieldValue.Kind.Reset)
private static ByteBuffer EMPTY_BYTE_BUFFER;
@Alias
- @RecomputeFieldValue(kind = Kind.Reset)
+ @RecomputeFieldValue(kind = RecomputeFieldValue.Kind.Reset)
private static long EMPTY_BYTE_BUFFER_ADDRESS;
@Substitute
@@ -492,6 +517,10 @@ protected EmbeddedChannel newContentDecoder(String contentEncoding) throws Excep
return new EmbeddedChannel(ctx.channel().id(), ctx.channel().metadata().hasDisconnect(),
ctx.channel().config(), ZlibCodecFactory.newZlibDecoder(wrapper));
}
+ if (Brotli.isAvailable() && BR.contentEqualsIgnoreCase(contentEncoding)) {
+ return new EmbeddedChannel(ctx.channel().id(), ctx.channel().metadata().hasDisconnect(),
+ ctx.channel().config(), new BrotliDecoder());
+ }
// 'identity' or unsupported
return null;
@@ -507,20 +536,23 @@ final class Target_io_netty_handler_codec_http2_DelegatingDecompressorFrameListe
@Substitute
protected EmbeddedChannel newContentDecompressor(ChannelHandlerContext ctx, CharSequence contentEncoding)
throws Http2Exception {
- if (!HttpHeaderValues.GZIP.contentEqualsIgnoreCase(contentEncoding)
- && !HttpHeaderValues.X_GZIP.contentEqualsIgnoreCase(contentEncoding)) {
- if (!HttpHeaderValues.DEFLATE.contentEqualsIgnoreCase(contentEncoding)
- && !HttpHeaderValues.X_DEFLATE.contentEqualsIgnoreCase(contentEncoding)) {
- return null;
- } else {
- ZlibWrapper wrapper = this.strict ? ZlibWrapper.ZLIB : ZlibWrapper.ZLIB_OR_NONE;
- return new EmbeddedChannel(ctx.channel().id(), ctx.channel().metadata().hasDisconnect(), ctx.channel().config(),
- new ChannelHandler[] { ZlibCodecFactory.newZlibDecoder(wrapper) });
- }
- } else {
- return new EmbeddedChannel(ctx.channel().id(), ctx.channel().metadata().hasDisconnect(), ctx.channel().config(),
- new ChannelHandler[] { ZlibCodecFactory.newZlibDecoder(ZlibWrapper.GZIP) });
+ if (GZIP.contentEqualsIgnoreCase(contentEncoding) || X_GZIP.contentEqualsIgnoreCase(contentEncoding)) {
+ return new EmbeddedChannel(ctx.channel().id(), ctx.channel().metadata().hasDisconnect(),
+ ctx.channel().config(), ZlibCodecFactory.newZlibDecoder(ZlibWrapper.GZIP));
+ }
+ if (DEFLATE.contentEqualsIgnoreCase(contentEncoding) || X_DEFLATE.contentEqualsIgnoreCase(contentEncoding)) {
+ final ZlibWrapper wrapper = strict ? ZlibWrapper.ZLIB : ZlibWrapper.ZLIB_OR_NONE;
+ // To be strict, 'deflate' means ZLIB, but some servers were not implemented correctly.
+ return new EmbeddedChannel(ctx.channel().id(), ctx.channel().metadata().hasDisconnect(),
+ ctx.channel().config(), ZlibCodecFactory.newZlibDecoder(wrapper));
}
+ if (Brotli.isAvailable() && BR.contentEqualsIgnoreCase(contentEncoding)) {
+ return new EmbeddedChannel(ctx.channel().id(), ctx.channel().metadata().hasDisconnect(),
+ ctx.channel().config(), new BrotliDecoder());
+ }
+
+ // 'identity' or unsupported
+ return null;
}
}
@@ -586,6 +618,14 @@ private static PrivateKey getPrivateKeyFromByteBuffer(ByteBuf encodedKeyBuf, Str
}
}
+@TargetClass(className = "io.netty.util.internal.shaded.org.jctools.util.UnsafeLongArrayAccess")
+final class Target_io_netty_util_internal_shaded_org_jctools_util_UnsafeRefArrayAccess {
+
+ @Alias
+ @RecomputeFieldValue(kind = RecomputeFieldValue.Kind.ArrayIndexShift, declClass = Object[].class)
+ public static int LONG_ELEMENT_SHIFT;
+}
+
class IsBouncyNotThere implements BooleanSupplier {
@Override
diff --git a/test-functional/src/test-default/java/graal/netty/graal/NettySubstitutions.java b/test-functional/src/test-default/java/graal/netty/graal/NettySubstitutions.java
index 4eab2181b..d910cf1e7 100644
--- a/test-functional/src/test-default/java/graal/netty/graal/NettySubstitutions.java
+++ b/test-functional/src/test-default/java/graal/netty/graal/NettySubstitutions.java
@@ -1,45 +1,71 @@
package graal.netty.graal;
+import static io.netty.handler.codec.http.HttpHeaderValues.BR;
+import static io.netty.handler.codec.http.HttpHeaderValues.DEFLATE;
+import static io.netty.handler.codec.http.HttpHeaderValues.GZIP;
+import static io.netty.handler.codec.http.HttpHeaderValues.X_DEFLATE;
+import static io.netty.handler.codec.http.HttpHeaderValues.X_GZIP;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.ByteBuffer;
+import java.security.InvalidAlgorithmParameterException;
+import java.security.KeyException;
+import java.security.NoSuchAlgorithmException;
+import java.security.PrivateKey;
+import java.security.Provider;
+import java.security.SecureRandom;
+import java.security.cert.X509Certificate;
+import java.security.spec.InvalidKeySpecException;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Queue;
+import java.util.Set;
+import java.util.concurrent.LinkedBlockingDeque;
+import java.util.function.BooleanSupplier;
+
+import javax.crypto.NoSuchPaddingException;
+import javax.net.ssl.KeyManagerFactory;
+import javax.net.ssl.SSLEngine;
+import javax.net.ssl.SSLException;
+import javax.net.ssl.TrustManagerFactory;
+
import com.oracle.svm.core.annotate.Alias;
import com.oracle.svm.core.annotate.RecomputeFieldValue;
import com.oracle.svm.core.annotate.RecomputeFieldValue.Kind;
import com.oracle.svm.core.annotate.Substitute;
import com.oracle.svm.core.annotate.TargetClass;
+
import graal.netty.EmptyByteBufStub;
import io.netty.bootstrap.AbstractBootstrapConfig;
import io.netty.bootstrap.ChannelFactory;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufAllocator;
-import io.netty.channel.*;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelFuture;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.DefaultChannelPromise;
import io.netty.channel.embedded.EmbeddedChannel;
+import io.netty.handler.codec.compression.Brotli;
+import io.netty.handler.codec.compression.BrotliDecoder;
import io.netty.handler.codec.compression.ZlibCodecFactory;
import io.netty.handler.codec.compression.ZlibWrapper;
-import io.netty.handler.codec.http.HttpHeaderValues;
import io.netty.handler.codec.http2.Http2Exception;
-import io.netty.handler.ssl.*;
+import io.netty.handler.ssl.ApplicationProtocolConfig;
import io.netty.handler.ssl.ApplicationProtocolConfig.SelectorFailureBehavior;
+import io.netty.handler.ssl.CipherSuiteFilter;
+import io.netty.handler.ssl.ClientAuth;
+import io.netty.handler.ssl.JdkAlpnApplicationProtocolNegotiator;
+import io.netty.handler.ssl.JdkApplicationProtocolNegotiator;
+import io.netty.handler.ssl.SslContext;
+import io.netty.handler.ssl.SslContextOption;
+import io.netty.handler.ssl.SslProvider;
import io.netty.util.concurrent.GlobalEventExecutor;
import io.netty.util.internal.logging.InternalLoggerFactory;
import io.netty.util.internal.logging.JdkLoggerFactory;
-import javax.crypto.NoSuchPaddingException;
-import javax.net.ssl.KeyManagerFactory;
-import javax.net.ssl.SSLEngine;
-import javax.net.ssl.SSLException;
-import javax.net.ssl.TrustManagerFactory;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.ByteBuffer;
-import java.security.*;
-import java.security.cert.X509Certificate;
-import java.security.spec.InvalidKeySpecException;
-import java.util.*;
-import java.util.concurrent.LinkedBlockingDeque;
-import java.util.function.BooleanSupplier;
-
-import static io.netty.handler.codec.http.HttpHeaderValues.*;
-
/**
* This substitution avoid having loggers added to the build
*/
@@ -140,15 +166,14 @@ public static boolean isCipherSuiteAvailable(String cipherSuite) {
@TargetClass(className = "io.netty.handler.ssl.JdkSslServerContext")
final class Target_io_netty_handler_ssl_JdkSslServerContext {
-
@Alias
Target_io_netty_handler_ssl_JdkSslServerContext(Provider provider,
- X509Certificate[] trustCertCollection, TrustManagerFactory trustManagerFactory,
- X509Certificate[] keyCertChain, PrivateKey key, String keyPassword,
- KeyManagerFactory keyManagerFactory, Iterable ciphers, CipherSuiteFilter cipherFilter,
- ApplicationProtocolConfig apn, long sessionCacheSize, long sessionTimeout,
- ClientAuth clientAuth, String[] protocols, boolean startTls,
- String keyStore)
+ X509Certificate[] trustCertCollection, TrustManagerFactory trustManagerFactory,
+ X509Certificate[] keyCertChain, PrivateKey key, String keyPassword,
+ KeyManagerFactory keyManagerFactory, Iterable ciphers, CipherSuiteFilter cipherFilter,
+ ApplicationProtocolConfig apn, long sessionCacheSize, long sessionTimeout,
+ ClientAuth clientAuth, String[] protocols, boolean startTls,
+ SecureRandom secureRandom, String keyStore, Target_io_netty_handler_ssl_ResumptionController resumptionController)
throws SSLException {
}
}
@@ -157,15 +182,16 @@ final class Target_io_netty_handler_ssl_JdkSslServerContext {
final class Target_io_netty_handler_ssl_JdkSslClientContext {
@Alias
- Target_io_netty_handler_ssl_JdkSslClientContext(Provider sslContextProvider, X509Certificate[] trustCertCollection,
- TrustManagerFactory trustManagerFactory, X509Certificate[] keyCertChain, PrivateKey key,
- String keyPassword, KeyManagerFactory keyManagerFactory, Iterable ciphers,
- CipherSuiteFilter cipherFilter, ApplicationProtocolConfig apn, String[] protocols,
- long sessionCacheSize, long sessionTimeout, String keyStoreType)
- throws SSLException {
-
+ Target_io_netty_handler_ssl_JdkSslClientContext(Provider sslContextProvider,
+ X509Certificate[] trustCertCollection, TrustManagerFactory trustManagerFactory,
+ X509Certificate[] keyCertChain, PrivateKey key, String keyPassword,
+ KeyManagerFactory keyManagerFactory, Iterable ciphers, CipherSuiteFilter cipherFilter,
+ ApplicationProtocolConfig apn, String[] protocols, long sessionCacheSize, long sessionTimeout,
+ SecureRandom secureRandom, String keyStoreType, String endpointIdentificationAlgorithm,
+ Target_io_netty_handler_ssl_ResumptionController resumptionController) throws SSLException {
}
}
+
@TargetClass(className = "io.netty.handler.ssl.SslHandler$SslEngineType")
final class Target_io_netty_handler_ssl_SslHandler$SslEngineType {
@@ -182,7 +208,7 @@ final class Target_io_netty_handler_ssl_SslHandler$SslEngineType {
final class Target_io_netty_handler_ssl_JdkAlpnApplicationProtocolNegotiator_AlpnWrapper {
@Substitute
public SSLEngine wrapSslEngine(SSLEngine engine, ByteBufAllocator alloc,
- JdkApplicationProtocolNegotiator applicationNegotiator, boolean isServer) {
+ JdkApplicationProtocolNegotiator applicationNegotiator, boolean isServer) {
return (SSLEngine) (Object) new Target_io_netty_handler_ssl_JdkAlpnSslEngine(engine, applicationNegotiator,
isServer);
}
@@ -193,7 +219,16 @@ public SSLEngine wrapSslEngine(SSLEngine engine, ByteBufAllocator alloc,
final class Target_io_netty_handler_ssl_JdkAlpnSslEngine {
@Alias
Target_io_netty_handler_ssl_JdkAlpnSslEngine(final SSLEngine engine,
- final JdkApplicationProtocolNegotiator applicationNegotiator, final boolean isServer) {
+ final JdkApplicationProtocolNegotiator applicationNegotiator, final boolean isServer) {
+
+ }
+}
+
+@TargetClass(className = "io.netty.handler.ssl.ResumptionController")
+final class Target_io_netty_handler_ssl_ResumptionController {
+
+ @Alias
+ Target_io_netty_handler_ssl_ResumptionController() {
}
}
@@ -202,40 +237,46 @@ final class Target_io_netty_handler_ssl_JdkAlpnSslEngine {
final class Target_io_netty_handler_ssl_SslContext {
@Substitute
- static SslContext newServerContextInternal(SslProvider provider, Provider sslContextProvider,
- X509Certificate[] trustCertCollection, TrustManagerFactory trustManagerFactory,
- X509Certificate[] keyCertChain,
- PrivateKey key, String keyPassword, KeyManagerFactory keyManagerFactory, Iterable ciphers,
- CipherSuiteFilter cipherFilter, ApplicationProtocolConfig apn, long sessionCacheSize, long sessionTimeout,
- ClientAuth clientAuth, String[] protocols, boolean startTls, boolean enableOcsp, String keyStoreType,
- Map.Entry, Object>... ctxOptions) throws SSLException {
+ static SslContext newServerContextInternal(SslProvider provider,
+ Provider sslContextProvider,
+ X509Certificate[] trustCertCollection, TrustManagerFactory trustManagerFactory,
+ X509Certificate[] keyCertChain, PrivateKey key, String keyPassword, KeyManagerFactory keyManagerFactory,
+ Iterable ciphers, CipherSuiteFilter cipherFilter, ApplicationProtocolConfig apn,
+ long sessionCacheSize, long sessionTimeout, ClientAuth clientAuth, String[] protocols, boolean startTls,
+ boolean enableOcsp, SecureRandom secureRandom, String keyStoreType,
+ Map.Entry, Object>... ctxOptions) throws SSLException {
if (enableOcsp) {
throw new IllegalArgumentException("OCSP is not supported with this SslProvider: " + provider);
}
+ Target_io_netty_handler_ssl_ResumptionController resumptionController = new Target_io_netty_handler_ssl_ResumptionController();
return (SslContext) (Object) new Target_io_netty_handler_ssl_JdkSslServerContext(sslContextProvider,
trustCertCollection, trustManagerFactory, keyCertChain, key, keyPassword,
keyManagerFactory, ciphers, cipherFilter, apn, sessionCacheSize, sessionTimeout,
- clientAuth, protocols, startTls, keyStoreType);
+ clientAuth, protocols, startTls, secureRandom, keyStoreType, resumptionController);
}
@Substitute
- static SslContext newClientContextInternal(SslProvider provider, Provider sslContextProvider,
- X509Certificate[] trustCert,
- TrustManagerFactory trustManagerFactory, X509Certificate[] keyCertChain, PrivateKey key, String keyPassword,
- KeyManagerFactory keyManagerFactory, Iterable ciphers, CipherSuiteFilter cipherFilter,
- ApplicationProtocolConfig apn, String[] protocols, long sessionCacheSize, long sessionTimeout,
- boolean enableOcsp,
- String keyStoreType, Map.Entry, Object>... options) throws SSLException {
+ static SslContext newClientContextInternal(SslProvider provider,
+ Provider sslContextProvider,
+ X509Certificate[] trustCert, TrustManagerFactory trustManagerFactory,
+ X509Certificate[] keyCertChain, PrivateKey key, String keyPassword, KeyManagerFactory keyManagerFactory,
+ Iterable ciphers, CipherSuiteFilter cipherFilter, ApplicationProtocolConfig apn, String[] protocols,
+ long sessionCacheSize, long sessionTimeout, boolean enableOcsp,
+ SecureRandom secureRandom, String keyStoreType, String endpointIdentificationAlgorithm,
+ Map.Entry, Object>... options) throws SSLException {
if (enableOcsp) {
throw new IllegalArgumentException("OCSP is not supported with this SslProvider: " + provider);
}
+ Target_io_netty_handler_ssl_ResumptionController resumptionController = new Target_io_netty_handler_ssl_ResumptionController();
return (SslContext) (Object) new Target_io_netty_handler_ssl_JdkSslClientContext(sslContextProvider,
trustCert, trustManagerFactory, keyCertChain, key, keyPassword,
keyManagerFactory, ciphers, cipherFilter, apn, protocols, sessionCacheSize,
- sessionTimeout, keyStoreType);
+ sessionTimeout, secureRandom, keyStoreType, endpointIdentificationAlgorithm,
+ resumptionController);
}
}
+
@TargetClass(className = "io.netty.handler.ssl.JdkDefaultApplicationProtocolNegotiator")
final class Target_io_netty_handler_ssl_JdkDefaultApplicationProtocolNegotiator {
@@ -366,22 +407,6 @@ private static Queue newTaskQueue0(int maxPendingTasks) {
}
}
-@TargetClass(className = "io.netty.buffer.AbstractReferenceCountedByteBuf")
-final class Target_io_netty_buffer_AbstractReferenceCountedByteBuf {
-
- @Alias
- @RecomputeFieldValue(kind = Kind.FieldOffset, name = "refCnt")
- private static long REFCNT_FIELD_OFFSET;
-}
-
-@TargetClass(className = "io.netty.util.AbstractReferenceCounted")
-final class Target_io_netty_util_AbstractReferenceCounted {
-
- @Alias
- @RecomputeFieldValue(kind = Kind.FieldOffset, name = "refCnt")
- private static long REFCNT_FIELD_OFFSET;
-}
-
// This class is runtime-initialized by NettyProcessor
final class Holder_io_netty_util_concurrent_ScheduledFutureTask {
static final long START_TIME = System.nanoTime();
@@ -431,11 +456,11 @@ static Class> tryToLoadClass(final ClassLoader loader, final Class> helper)
final class Target_io_netty_buffer_EmptyByteBuf {
@Alias
- @RecomputeFieldValue(kind = Kind.Reset)
+ @RecomputeFieldValue(kind = RecomputeFieldValue.Kind.Reset)
private static ByteBuffer EMPTY_BYTE_BUFFER;
@Alias
- @RecomputeFieldValue(kind = Kind.Reset)
+ @RecomputeFieldValue(kind = RecomputeFieldValue.Kind.Reset)
private static long EMPTY_BYTE_BUFFER_ADDRESS;
@Substitute
@@ -492,6 +517,10 @@ protected EmbeddedChannel newContentDecoder(String contentEncoding) throws Excep
return new EmbeddedChannel(ctx.channel().id(), ctx.channel().metadata().hasDisconnect(),
ctx.channel().config(), ZlibCodecFactory.newZlibDecoder(wrapper));
}
+ if (Brotli.isAvailable() && BR.contentEqualsIgnoreCase(contentEncoding)) {
+ return new EmbeddedChannel(ctx.channel().id(), ctx.channel().metadata().hasDisconnect(),
+ ctx.channel().config(), new BrotliDecoder());
+ }
// 'identity' or unsupported
return null;
@@ -507,20 +536,23 @@ final class Target_io_netty_handler_codec_http2_DelegatingDecompressorFrameListe
@Substitute
protected EmbeddedChannel newContentDecompressor(ChannelHandlerContext ctx, CharSequence contentEncoding)
throws Http2Exception {
- if (!HttpHeaderValues.GZIP.contentEqualsIgnoreCase(contentEncoding)
- && !HttpHeaderValues.X_GZIP.contentEqualsIgnoreCase(contentEncoding)) {
- if (!HttpHeaderValues.DEFLATE.contentEqualsIgnoreCase(contentEncoding)
- && !HttpHeaderValues.X_DEFLATE.contentEqualsIgnoreCase(contentEncoding)) {
- return null;
- } else {
- ZlibWrapper wrapper = this.strict ? ZlibWrapper.ZLIB : ZlibWrapper.ZLIB_OR_NONE;
- return new EmbeddedChannel(ctx.channel().id(), ctx.channel().metadata().hasDisconnect(), ctx.channel().config(),
- new ChannelHandler[] { ZlibCodecFactory.newZlibDecoder(wrapper) });
- }
- } else {
- return new EmbeddedChannel(ctx.channel().id(), ctx.channel().metadata().hasDisconnect(), ctx.channel().config(),
- new ChannelHandler[] { ZlibCodecFactory.newZlibDecoder(ZlibWrapper.GZIP) });
+ if (GZIP.contentEqualsIgnoreCase(contentEncoding) || X_GZIP.contentEqualsIgnoreCase(contentEncoding)) {
+ return new EmbeddedChannel(ctx.channel().id(), ctx.channel().metadata().hasDisconnect(),
+ ctx.channel().config(), ZlibCodecFactory.newZlibDecoder(ZlibWrapper.GZIP));
+ }
+ if (DEFLATE.contentEqualsIgnoreCase(contentEncoding) || X_DEFLATE.contentEqualsIgnoreCase(contentEncoding)) {
+ final ZlibWrapper wrapper = strict ? ZlibWrapper.ZLIB : ZlibWrapper.ZLIB_OR_NONE;
+ // To be strict, 'deflate' means ZLIB, but some servers were not implemented correctly.
+ return new EmbeddedChannel(ctx.channel().id(), ctx.channel().metadata().hasDisconnect(),
+ ctx.channel().config(), ZlibCodecFactory.newZlibDecoder(wrapper));
}
+ if (Brotli.isAvailable() && BR.contentEqualsIgnoreCase(contentEncoding)) {
+ return new EmbeddedChannel(ctx.channel().id(), ctx.channel().metadata().hasDisconnect(),
+ ctx.channel().config(), new BrotliDecoder());
+ }
+
+ // 'identity' or unsupported
+ return null;
}
}
@@ -586,6 +618,14 @@ private static PrivateKey getPrivateKeyFromByteBuffer(ByteBuf encodedKeyBuf, Str
}
}
+@TargetClass(className = "io.netty.util.internal.shaded.org.jctools.util.UnsafeLongArrayAccess")
+final class Target_io_netty_util_internal_shaded_org_jctools_util_UnsafeRefArrayAccess {
+
+ @Alias
+ @RecomputeFieldValue(kind = RecomputeFieldValue.Kind.ArrayIndexShift, declClass = Object[].class)
+ public static int LONG_ELEMENT_SHIFT;
+}
+
class IsBouncyNotThere implements BooleanSupplier {
@Override
diff --git a/test-parent/pom.xml b/test-parent/pom.xml
index 7ba26a30a..78282e0c6 100644
--- a/test-parent/pom.xml
+++ b/test-parent/pom.xml
@@ -78,7 +78,7 @@
org.junit
junit-bom
- 5.12.2
+ 5.14.0
pom
import
diff --git a/test-resilience/pom.xml b/test-resilience/pom.xml
index 6a48e2c7e..342570259 100644
--- a/test-resilience/pom.xml
+++ b/test-resilience/pom.xml
@@ -38,7 +38,7 @@
io.netty
netty-bom
- 4.1.93.Final
+ 4.1.125.Final
pom
import