From fe28ed651d943f7eedbdd231c8c99e6a5293b4e1 Mon Sep 17 00:00:00 2001 From: Geoff Bourne Date: Thu, 14 Aug 2025 20:22:53 -0500 Subject: [PATCH] build(deps): bump reactor-netty to 1.2.9 --- build.gradle | 2 +- .../me/itzg/helpers/http/SharedFetch.java | 54 ++++++++++++------- .../me/itzg/helpers/http/SharedFetchArgs.java | 7 +++ 3 files changed, 43 insertions(+), 20 deletions(-) diff --git a/build.gradle b/build.gradle index d63e2bf0..e6dcd1e7 100644 --- a/build.gradle +++ b/build.gradle @@ -97,7 +97,7 @@ dependencies { implementation 'com.kjetland:mbknor-jackson-jsonschema_2.13:1.0.39' implementation 'com.jayway.jsonpath:json-path:2.9.0' implementation 'org.apache.httpcomponents.client5:httpclient5:5.5' - implementation 'io.projectreactor.netty:reactor-netty-http:1.2.8' + implementation 'io.projectreactor.netty:reactor-netty-http:1.2.9' implementation 'org.apache.maven:maven-artifact:3.9.11' implementation 'commons-codec:commons-codec:1.19.0' // for RFC5987 parsing of content-disposition filename* diff --git a/src/main/java/me/itzg/helpers/http/SharedFetch.java b/src/main/java/me/itzg/helpers/http/SharedFetch.java index f8d85875..14b28672 100644 --- a/src/main/java/me/itzg/helpers/http/SharedFetch.java +++ b/src/main/java/me/itzg/helpers/http/SharedFetch.java @@ -59,23 +59,40 @@ public SharedFetch(String forCommand, Options options) { .pendingAcquireTimeout(options.getPendingAcquireTimeout()) .build(); - reactiveClient = HttpClient.create(connectionProvider) - .proxyWithSystemProperties() - .headers(headers -> { - headers - .set(HttpHeaderNames.USER_AGENT.toString(), userAgent) - .set("x-fetch-session", fetchSessionId); - if (options.getExtraHeaders() != null) { - options.getExtraHeaders().forEach(headers::set); - } - } - ) - // Reference https://projectreactor.io/docs/netty/release/reference/index.html#response-timeout - .responseTimeout(options.getResponseTimeout()); + reactiveClient = + applyWiretap( + applyUseHttp2( + HttpClient.create(connectionProvider) + .proxyWithSystemProperties() + .headers(headers -> { + headers + .set(HttpHeaderNames.USER_AGENT.toString(), userAgent) + .set("x-fetch-session", fetchSessionId); + if (options.getExtraHeaders() != null) { + options.getExtraHeaders().forEach(headers::set); + } + } + ) + // Reference https://projectreactor.io/docs/netty/release/reference/index.html#response-timeout + .responseTimeout(options.getResponseTimeout()), + options + ), + options + ); + + headers.put("x-fetch-session", fetchSessionId); + + this.filesViaUrl = options.getFilesViaUrl(); + } + private HttpClient applyWiretap(HttpClient c, Options options) { + return options.isWiretap() ? c.wiretap(true) : c; + } + + private HttpClient applyUseHttp2(HttpClient c, Options options) { if (options.isUseHttp2()) { log.debug("Using HTTP/2"); - reactiveClient + return c // https://projectreactor.io/docs/netty/release/reference/http-client.html#HTTP2 .protocol(HttpProtocol.HTTP11, HttpProtocol.H2) .secure(spec -> @@ -87,7 +104,7 @@ public SharedFetch(String forCommand, Options options) { } else { log.debug("Using HTTP/1.1"); - reactiveClient + return c .secure(spec -> spec.sslContext((GenericSslContextSpec) Http11SslContextSpec.forClient()) // Reference https://projectreactor.io/docs/netty/release/reference/index.html#ssl-tls-timeout @@ -95,9 +112,6 @@ public SharedFetch(String forCommand, Options options) { ); } - headers.put("x-fetch-session", fetchSessionId); - - this.filesViaUrl = options.getFilesViaUrl(); } public FetchBuilderBase fetch(URI uri) { @@ -151,6 +165,8 @@ public static class Options { @Default private final boolean useHttp2 = true; + private final boolean wiretap; + public Options withHeader(String key, String value) { final Map newHeaders = extraHeaders != null ? new HashMap<>(extraHeaders) : new HashMap<>(); @@ -158,7 +174,7 @@ public Options withHeader(String key, String value) { return new Options( responseTimeout, tlsHandshakeTimeout, maxIdleTimeout, pendingAcquireTimeout, - newHeaders, filesViaUrl, useHttp2 + newHeaders, filesViaUrl, useHttp2, wiretap ); } } diff --git a/src/main/java/me/itzg/helpers/http/SharedFetchArgs.java b/src/main/java/me/itzg/helpers/http/SharedFetchArgs.java index 30438482..7a80ff3a 100644 --- a/src/main/java/me/itzg/helpers/http/SharedFetchArgs.java +++ b/src/main/java/me/itzg/helpers/http/SharedFetchArgs.java @@ -55,6 +55,13 @@ public void setUseHttp2(boolean useHttp2) { optionsBuilder.useHttp2(useHttp2); } + @Option(names = "--wiretap", defaultValue = "${env:FETCH_WIRETAP:-false}", + description = "Whether to enable Reactor Netty wiretap logging. Default: ${DEFAULT-VALUE}" + ) + public void setWiretap(boolean wiretap) { + optionsBuilder.wiretap(wiretap); + } + public Options options() { return optionsBuilder.build(); }