[Git][java-team/async-http-client][master] 4 commits: Standards-Version updated to 4.6.0.1

Emmanuel Bourg (@ebourg) gitlab at salsa.debian.org
Sat Sep 18 09:05:48 BST 2021



Emmanuel Bourg pushed to branch master at Debian Java Maintainers / async-http-client


Commits:
018e405a by Emmanuel Bourg at 2021-09-18T10:00:37+02:00
Standards-Version updated to 4.6.0.1

- - - - -
50a5dd49 by Emmanuel Bourg at 2021-09-18T10:01:32+02:00
New upstream version 2.12.3
- - - - -
638dd547 by Emmanuel Bourg at 2021-09-18T10:01:33+02:00
Update upstream source from tag 'upstream/2.12.3'

Update to upstream version '2.12.3'
with Debian dir 121371b6482804776bdb71e6753b2e662367a53b
- - - - -
5c0dd236 by Emmanuel Bourg at 2021-09-18T10:05:24+02:00
New upstream release (2.12.3)

- - - - -


26 changed files:

- bom/pom.xml
- client/pom.xml
- client/src/main/java/org/asynchttpclient/netty/handler/intercept/Redirect30xInterceptor.java
- client/src/main/java/org/asynchttpclient/netty/request/NettyRequestFactory.java
- client/src/main/java/org/asynchttpclient/netty/request/NettyRequestSender.java
- client/src/main/java/org/asynchttpclient/proxy/ProxyServer.java
- client/src/test/java/org/asynchttpclient/AsyncStreamHandlerTest.java
- client/src/test/java/org/asynchttpclient/BasicHttpProxyToHttpsTest.java
- client/src/test/java/org/asynchttpclient/Head302Test.java
- client/src/test/java/org/asynchttpclient/MultipleHeaderTest.java
- + client/src/test/java/org/asynchttpclient/netty/NettyConnectionResetByPeerTest.java
- + client/src/test/java/org/asynchttpclient/proxy/CustomHeaderProxyTest.java
- debian/changelog
- debian/control
- example/pom.xml
- extras/guava/pom.xml
- extras/jdeferred/pom.xml
- extras/pom.xml
- extras/registry/pom.xml
- extras/retrofit2/pom.xml
- extras/rxjava/pom.xml
- extras/rxjava2/pom.xml
- extras/simple/pom.xml
- extras/typesafeconfig/pom.xml
- netty-utils/pom.xml
- pom.xml


Changes:

=====================================
bom/pom.xml
=====================================
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.asynchttpclient</groupId>
         <artifactId>async-http-client-project</artifactId>
-        <version>2.12.2</version>
+        <version>2.12.3</version>
     </parent>
 
     <artifactId>async-http-client-bom</artifactId>


=====================================
client/pom.xml
=====================================
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.asynchttpclient</groupId>
     <artifactId>async-http-client-project</artifactId>
-    <version>2.12.2</version>
+    <version>2.12.3</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>async-http-client</artifactId>


=====================================
client/src/main/java/org/asynchttpclient/netty/handler/intercept/Redirect30xInterceptor.java
=====================================
@@ -38,6 +38,8 @@ import java.util.Set;
 
 import static io.netty.handler.codec.http.HttpHeaderNames.*;
 import static org.asynchttpclient.util.HttpConstants.Methods.GET;
+import static org.asynchttpclient.util.HttpConstants.Methods.HEAD;
+import static org.asynchttpclient.util.HttpConstants.Methods.OPTIONS;
 import static org.asynchttpclient.util.HttpConstants.ResponseStatusCodes.*;
 import static org.asynchttpclient.util.HttpUtils.followRedirect;
 import static org.asynchttpclient.util.MiscUtils.isNonEmpty;
@@ -87,7 +89,7 @@ public class Redirect30xInterceptor {
 
         String originalMethod = request.getMethod();
         boolean switchToGet = !originalMethod.equals(GET)
-                && (statusCode == MOVED_PERMANENTLY_301 || statusCode == SEE_OTHER_303 || (statusCode == FOUND_302 && !config.isStrict302Handling()));
+                && !originalMethod.equals(OPTIONS) && !originalMethod.equals(HEAD) && (statusCode == MOVED_PERMANENTLY_301 || statusCode == SEE_OTHER_303 || (statusCode == FOUND_302 && !config.isStrict302Handling()));
         boolean keepBody = statusCode == TEMPORARY_REDIRECT_307 || statusCode == PERMANENT_REDIRECT_308 || (statusCode == FOUND_302 && config.isStrict302Handling());
 
         final RequestBuilder requestBuilder = new RequestBuilder(switchToGet ? GET : originalMethod)
@@ -126,7 +128,6 @@ public class Redirect30xInterceptor {
         HttpHeaders responseHeaders = response.headers();
         String location = responseHeaders.get(LOCATION);
         Uri newUri = Uri.create(future.getUri(), location);
-
         LOGGER.debug("Redirecting to {}", newUri);
 
         CookieStore cookieStore = config.getCookieStore();


=====================================
client/src/main/java/org/asynchttpclient/netty/request/NettyRequestFactory.java
=====================================
@@ -140,6 +140,7 @@ public final class NettyRequestFactory {
     if (connect) {
       // assign proxy-auth as configured on request
       headers.set(PROXY_AUTHORIZATION, request.getHeaders().getAll(PROXY_AUTHORIZATION));
+      headers.set(USER_AGENT, request.getHeaders().getAll(USER_AGENT));
 
     } else {
       // assign headers as configured on request


=====================================
client/src/main/java/org/asynchttpclient/netty/request/NettyRequestSender.java
=====================================
@@ -275,6 +275,12 @@ public final class NettyRequestSender {
 
     // some headers are only set when performing the first request
     HttpHeaders headers = future.getNettyRequest().getHttpRequest().headers();
+    if(proxy != null && proxy.getCustomHeaders() != null ) {
+      HttpHeaders customHeaders = proxy.getCustomHeaders().apply(request);
+      if(customHeaders != null) {
+        headers.add(customHeaders);
+      }
+    }
     Realm realm = future.getRealm();
     Realm proxyRealm = future.getProxyRealm();
     requestFactory.addAuthorizationHeader(headers, perConnectionAuthorizationHeader(request, proxy, realm));
@@ -464,7 +470,7 @@ public final class NettyRequestSender {
   public void abort(Channel channel, NettyResponseFuture<?> future, Throwable t) {
 
     if (channel != null) {
-      Object attribute = Channels.getAttribute(future.channel());
+      Object attribute = Channels.getAttribute(channel);
       if (attribute instanceof StreamedResponsePublisher) {
         ((StreamedResponsePublisher) attribute).setError(t);
       }


=====================================
client/src/main/java/org/asynchttpclient/proxy/ProxyServer.java
=====================================
@@ -16,11 +16,15 @@
  */
 package org.asynchttpclient.proxy;
 
+import io.netty.handler.codec.http.HttpHeaders;
+
 import org.asynchttpclient.Realm;
+import org.asynchttpclient.Request;
 
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.function.Function;
 
 import static org.asynchttpclient.util.Assertions.assertNotNull;
 import static org.asynchttpclient.util.MiscUtils.isNonEmpty;
@@ -36,15 +40,22 @@ public class ProxyServer {
   private final Realm realm;
   private final List<String> nonProxyHosts;
   private final ProxyType proxyType;
+  private final Function<Request, HttpHeaders> customHeaders;
 
   public ProxyServer(String host, int port, int securedPort, Realm realm, List<String> nonProxyHosts,
-                     ProxyType proxyType) {
+                     ProxyType proxyType, Function<Request, HttpHeaders> customHeaders) {
     this.host = host;
     this.port = port;
     this.securedPort = securedPort;
     this.realm = realm;
     this.nonProxyHosts = nonProxyHosts;
     this.proxyType = proxyType;
+    this.customHeaders = customHeaders;
+  }
+
+  public ProxyServer(String host, int port, int securedPort, Realm realm, List<String> nonProxyHosts,
+                     ProxyType proxyType) {
+    this(host, port, securedPort, realm, nonProxyHosts, proxyType, null);
   }
 
   public String getHost() {
@@ -71,6 +82,10 @@ public class ProxyServer {
     return proxyType;
   }
 
+  public Function<Request, HttpHeaders> getCustomHeaders() {
+    return customHeaders;
+  }
+
   /**
    * Checks whether proxy should be used according to nonProxyHosts settings of
    * it, or we want to go directly to target host. If <code>null</code> proxy is
@@ -118,6 +133,7 @@ public class ProxyServer {
     private Realm realm;
     private List<String> nonProxyHosts;
     private ProxyType proxyType;
+    private Function<Request, HttpHeaders> customHeaders;
 
     public Builder(String host, int port) {
       this.host = host;
@@ -157,11 +173,16 @@ public class ProxyServer {
       return this;
     }
 
+    public Builder setCustomHeaders(Function<Request, HttpHeaders> customHeaders) {
+      this.customHeaders = customHeaders;
+      return this;
+    }
+
     public ProxyServer build() {
       List<String> nonProxyHosts = this.nonProxyHosts != null ? Collections.unmodifiableList(this.nonProxyHosts)
               : Collections.emptyList();
       ProxyType proxyType = this.proxyType != null ? this.proxyType : ProxyType.HTTP;
-      return new ProxyServer(host, port, securedPort, realm, nonProxyHosts, proxyType);
+      return new ProxyServer(host, port, securedPort, realm, nonProxyHosts, proxyType, customHeaders);
     }
   }
 }


=====================================
client/src/test/java/org/asynchttpclient/AsyncStreamHandlerTest.java
=====================================
@@ -428,6 +428,8 @@ public class AsyncStreamHandlerTest extends HttpTest {
       }));
   }
 
+  // This test is flaky - see https://github.com/AsyncHttpClient/async-http-client/issues/1728#issuecomment-699962325
+  // For now, just run again if fails
   @Test(groups = "online")
   public void asyncOptionsTest() throws Throwable {
 


=====================================
client/src/test/java/org/asynchttpclient/BasicHttpProxyToHttpsTest.java
=====================================
@@ -31,18 +31,20 @@ import java.io.IOException;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
 
-import static io.netty.handler.codec.http.HttpHeaderNames.PROXY_AUTHENTICATE;
-import static io.netty.handler.codec.http.HttpHeaderNames.PROXY_AUTHORIZATION;
+import static io.netty.handler.codec.http.HttpHeaderNames.*;
 import static org.asynchttpclient.Dsl.*;
 import static org.asynchttpclient.test.TestUtils.addHttpConnector;
 import static org.asynchttpclient.test.TestUtils.addHttpsConnector;
+import static org.asynchttpclient.config.AsyncHttpClientConfigDefaults.*;
 
 /**
- * Test that validates that when having an HTTP proxy and trying to access an HTTPS through the proxy the proxy credentials should be passed during the CONNECT request.
+ * Test that validates that when having an HTTP proxy and trying to access an HTTPS
+ * through the proxy the proxy credentials and a custom user-agent (if set) should be passed during the CONNECT request.
  */
 public class BasicHttpProxyToHttpsTest {
 
   private static final Logger LOGGER = LoggerFactory.getLogger(BasicHttpProxyToHttpsTest.class);
+  private static final String CUSTOM_USER_AGENT = "custom-user-agent";
 
   private int httpPort;
   private int proxyPort;
@@ -66,13 +68,24 @@ public class BasicHttpProxyToHttpsTest {
     ConnectHandler connectHandler = new ConnectHandler() {
 
       @Override
+      // This proxy receives a CONNECT request from the client before making the real request for the target host.
       protected boolean handleAuthentication(HttpServletRequest request, HttpServletResponse response, String address) {
+
+        // If the userAgent of the CONNECT request is the same as the default userAgent,
+        // then the custom userAgent was not properly propagated and the test should fail.
+        String userAgent = request.getHeader(USER_AGENT.toString());
+        if(userAgent.equals(defaultUserAgent())) {
+          return false;
+        }
+
+        // If the authentication failed, the test should also fail.
         String authorization = request.getHeader(PROXY_AUTHORIZATION.toString());
         if (authorization == null) {
           response.setStatus(HttpServletResponse.SC_PROXY_AUTHENTICATION_REQUIRED);
           response.setHeader(PROXY_AUTHENTICATE.toString(), "Basic realm=\"Fake Realm\"");
           return false;
-        } else if (authorization.equals("Basic am9obmRvZTpwYXNz")) {
+        }
+         else if (authorization.equals("Basic am9obmRvZTpwYXNz")) {
           return true;
         }
         response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
@@ -98,6 +111,7 @@ public class BasicHttpProxyToHttpsTest {
       String targetUrl = "https://localhost:" + httpPort + "/foo/bar";
       Request request = get(targetUrl)
               .setProxyServer(proxyServer("127.0.0.1", proxyPort).setRealm(realm(AuthScheme.BASIC, "johndoe", "pass")))
+              .setHeader("user-agent", CUSTOM_USER_AGENT)
               // .setRealm(realm(AuthScheme.BASIC, "user", "passwd"))
               .build();
       Future<Response> responseFuture = client.executeRequest(request);
@@ -107,4 +121,4 @@ public class BasicHttpProxyToHttpsTest {
       Assert.assertEquals("/foo/bar", response.getHeader("X-pathInfo"));
     }
   }
-}
\ No newline at end of file
+}


=====================================
client/src/test/java/org/asynchttpclient/Head302Test.java
=====================================
@@ -70,9 +70,17 @@ public class Head302Test extends AbstractBasicTest {
   private static class Head302handler extends AbstractHandler {
     public void handle(String s, org.eclipse.jetty.server.Request r, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
       if ("HEAD".equalsIgnoreCase(request.getMethod())) {
-        response.setStatus(HttpServletResponse.SC_FOUND); // 302
-        response.setHeader("Location", request.getPathInfo() + "_moved");
-      } else if ("GET".equalsIgnoreCase(request.getMethod())) {
+        // See https://github.com/AsyncHttpClient/async-http-client/issues/1728#issuecomment-700007980
+        // When setFollowRedirect == TRUE, a follow-up request to a HEAD request will also be a HEAD.
+        // This will cause an infinite loop, which will error out once the maximum amount of redirects is hit (default 5).
+        // Instead, we (arbitrarily) choose to allow for 3 redirects and then return a 200.
+        if(request.getRequestURI().endsWith("_moved_moved_moved")) {
+          response.setStatus(HttpServletResponse.SC_OK);
+        } else {
+          response.setStatus(HttpServletResponse.SC_FOUND); // 302
+          response.setHeader("Location", request.getPathInfo() + "_moved");
+        }
+      } else if ("GET".equalsIgnoreCase(request.getMethod()) ) {
         response.setStatus(HttpServletResponse.SC_OK);
       } else {
         response.setStatus(HttpServletResponse.SC_FORBIDDEN);


=====================================
client/src/test/java/org/asynchttpclient/MultipleHeaderTest.java
=====================================
@@ -53,8 +53,8 @@ public class MultipleHeaderTest extends AbstractBasicTest {
           socket.shutdownInput();
           if (req.endsWith("MultiEnt")) {
             OutputStreamWriter outputStreamWriter = new OutputStreamWriter(socket.getOutputStream());
-            outputStreamWriter.append("HTTP/1.0 200 OK\n" + "Connection: close\n" + "Content-Type: text/plain; charset=iso-8859-1\n" + "Content-Length: 2\n"
-                    + "Content-Length: 1\n" + "\n0\n");
+            outputStreamWriter.append("HTTP/1.0 200 OK\n" + "Connection: close\n" + "Content-Type: text/plain; charset=iso-8859-1\n" + "X-Duplicated-Header: 2\n"
+                    + "X-Duplicated-Header: 1\n" + "\n0\n");
             outputStreamWriter.flush();
             socket.shutdownOutput();
           } else if (req.endsWith("MultiOther")) {
@@ -148,7 +148,7 @@ public class MultipleHeaderTest extends AbstractBasicTest {
         public State onHeadersReceived(HttpHeaders response) {
           try {
             int i = 0;
-            for (String header : response.getAll(CONTENT_LENGTH)) {
+            for (String header : response.getAll("X-Duplicated-Header")) {
               clHeaders[i++] = header;
             }
           } finally {


=====================================
client/src/test/java/org/asynchttpclient/netty/NettyConnectionResetByPeerTest.java
=====================================
@@ -0,0 +1,108 @@
+package org.asynchttpclient.netty;
+
+import org.asynchttpclient.DefaultAsyncHttpClient;
+import org.asynchttpclient.DefaultAsyncHttpClientConfig;
+import org.asynchttpclient.RequestBuilder;
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.Test;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.net.SocketException;
+import java.util.Arrays;
+import java.util.concurrent.Exchanger;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeoutException;
+import java.util.function.Consumer;
+
+import static org.hamcrest.CoreMatchers.instanceOf;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.not;
+import static org.testng.Assert.assertTrue;
+
+public class NettyConnectionResetByPeerTest {
+
+    private String resettingServerAddress;
+
+    @BeforeTest
+    public void setUp() {
+        resettingServerAddress = createResettingServer();
+    }
+
+    @Test
+    public void testAsyncHttpClientConnectionResetByPeer() throws InterruptedException {
+        try {
+            DefaultAsyncHttpClientConfig config = new DefaultAsyncHttpClientConfig.Builder()
+                    .setRequestTimeout(1500)
+                    .build();
+            new DefaultAsyncHttpClient(config).executeRequest(
+                    new RequestBuilder("GET").setUrl(resettingServerAddress)
+            )
+                    .get();
+        } catch (ExecutionException e) {
+            Throwable ex = e.getCause();
+            assertThat(ex, is(instanceOf(IOException.class)));
+        }
+    }
+
+    private static String createResettingServer() {
+        return createServer(sock -> {
+            try (Socket socket = sock) {
+                socket.setSoLinger(true, 0);
+                InputStream inputStream = socket.getInputStream();
+                //to not eliminate read
+                OutputStream os = new OutputStream() {
+                    @Override
+                    public void write(int b) {
+                        // Do nothing
+                    }
+                };
+                os.write(startRead(inputStream));
+            } catch (IOException e) {
+                throw new RuntimeException(e);
+            }
+        });
+    }
+
+    private static String createServer(Consumer<Socket> handler) {
+        Exchanger<Integer> portHolder = new Exchanger<>();
+        Thread t = new Thread(() -> {
+            try (ServerSocket ss = new ServerSocket(0)) {
+                portHolder.exchange(ss.getLocalPort());
+                while (true) {
+                    handler.accept(ss.accept());
+                }
+            } catch (Exception e) {
+                if (e instanceof InterruptedException) {
+                    Thread.currentThread()
+                            .interrupt();
+                }
+                throw new RuntimeException(e);
+            }
+        });
+        t.setDaemon(true);
+        t.start();
+        return tryGetAddress(portHolder);
+    }
+
+    private static String tryGetAddress(Exchanger<Integer> portHolder) {
+        try {
+            return "http://localhost:" + portHolder.exchange(0);
+        } catch (InterruptedException e) {
+            Thread.currentThread()
+                    .interrupt();
+            throw new RuntimeException(e);
+        }
+    }
+
+    private static byte[] startRead(InputStream inputStream) throws IOException {
+        byte[] buffer = new byte[4];
+        int length = inputStream.read(buffer);
+        return Arrays.copyOf(buffer, length);
+    }
+
+}


=====================================
client/src/test/java/org/asynchttpclient/proxy/CustomHeaderProxyTest.java
=====================================
@@ -0,0 +1,119 @@
+/*
+ * Copyright (c) 2010-2012 Sonatype, Inc. All rights reserved.
+ *
+ * This program is licensed to you under the Apache License Version 2.0,
+ * and you may not use this file except in compliance with the Apache License Version 2.0.
+ * You may obtain a copy of the Apache License Version 2.0 at http://www.apache.org/licenses/LICENSE-2.0.
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the Apache License Version 2.0 is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the Apache License Version 2.0 for the specific language governing permissions and limitations there under.
+ */
+package org.asynchttpclient.proxy;
+
+import io.netty.handler.codec.http.DefaultHttpHeaders;
+import org.asynchttpclient.AbstractBasicTest;
+import org.asynchttpclient.AsyncHttpClient;
+import org.asynchttpclient.AsyncHttpClientConfig;
+import org.asynchttpclient.Response;
+import org.asynchttpclient.request.body.generator.ByteArrayBodyGenerator;
+import org.asynchttpclient.test.EchoHandler;
+import org.asynchttpclient.util.HttpConstants;
+import org.eclipse.jetty.proxy.ConnectHandler;
+import org.eclipse.jetty.server.Request;
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.ServerConnector;
+import org.eclipse.jetty.server.handler.AbstractHandler;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+import static org.asynchttpclient.Dsl.*;
+import static org.asynchttpclient.test.TestUtils.*;
+import static org.testng.Assert.assertEquals;
+
+/**
+ * Proxy usage tests.
+ */
+public class CustomHeaderProxyTest extends AbstractBasicTest {
+
+    private Server server2;
+
+    private final String customHeaderName = "Custom-Header";
+    private final String customHeaderValue = "Custom-Value";
+
+    public AbstractHandler configureHandler() throws Exception {
+      return new ProxyHandler(customHeaderName, customHeaderValue);
+    }
+
+    @BeforeClass(alwaysRun = true)
+    public void setUpGlobal() throws Exception {
+      server = new Server();
+      ServerConnector connector = addHttpConnector(server);
+      server.setHandler(configureHandler());
+      server.start();
+      port1 = connector.getLocalPort();
+
+      server2 = new Server();
+      ServerConnector connector2 = addHttpsConnector(server2);
+      server2.setHandler(new EchoHandler());
+      server2.start();
+      port2 = connector2.getLocalPort();
+
+      logger.info("Local HTTP server started successfully");
+    }
+
+    @AfterClass(alwaysRun = true)
+    public void tearDownGlobal() throws Exception {
+      server.stop();
+      server2.stop();
+    }
+
+    @Test
+    public void testHttpProxy() throws Exception {
+      AsyncHttpClientConfig config = config()
+        .setFollowRedirect(true)
+        .setProxyServer(
+          proxyServer("localhost", port1)
+            .setCustomHeaders((req) -> new DefaultHttpHeaders().add(customHeaderName, customHeaderValue))
+            .build()
+        )
+        .setUseInsecureTrustManager(true)
+        .build();
+      try (AsyncHttpClient asyncHttpClient = asyncHttpClient(config)) {
+        Response r = asyncHttpClient.executeRequest(post(getTargetUrl2()).setBody(new ByteArrayBodyGenerator(LARGE_IMAGE_BYTES))).get();
+        assertEquals(r.getStatusCode(), 200);
+      }
+    }
+
+    public static class ProxyHandler extends ConnectHandler {
+      String customHeaderName;
+      String customHeaderValue;
+
+      public ProxyHandler(String customHeaderName, String customHeaderValue) {
+        this.customHeaderName = customHeaderName;
+        this.customHeaderValue = customHeaderValue;
+      }
+
+      @Override
+      public void handle(String s, Request r, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
+        if (HttpConstants.Methods.CONNECT.equalsIgnoreCase(request.getMethod())) {
+          if (request.getHeader(customHeaderName).equals(customHeaderValue)) {
+            response.setStatus(HttpServletResponse.SC_OK);
+            super.handle(s, r, request, response);
+          } else {
+            response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+            r.setHandled(true);
+          }
+        } else {
+          super.handle(s, r, request, response);
+        }
+      }
+    }
+}


=====================================
debian/changelog
=====================================
@@ -1,3 +1,10 @@
+async-http-client (2.12.3-1) unstable; urgency=medium
+
+  * New upstream release
+  * Standards-Version updated to 4.6.0.1
+
+ -- Emmanuel Bourg <ebourg at apache.org>  Sat, 18 Sep 2021 10:05:00 +0200
+
 async-http-client (2.12.2-1) unstable; urgency=medium
 
   * New upstream release


=====================================
debian/control
=====================================
@@ -14,7 +14,7 @@ Build-Depends:
  libslf4j-java,
  maven-debian-helper (>= 2.2),
  libhamcrest-java
-Standards-Version: 4.5.1
+Standards-Version: 4.6.0.1
 Rules-Requires-Root: no
 Vcs-Git: https://salsa.debian.org/java-team/async-http-client.git
 Vcs-Browser: https://salsa.debian.org/java-team/async-http-client


=====================================
example/pom.xml
=====================================
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.asynchttpclient</groupId>
     <artifactId>async-http-client-project</artifactId>
-    <version>2.12.2</version>
+    <version>2.12.3</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>async-http-client-example</artifactId>


=====================================
extras/guava/pom.xml
=====================================
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.asynchttpclient</groupId>
     <artifactId>async-http-client-extras-parent</artifactId>
-    <version>2.12.2</version>
+    <version>2.12.3</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>async-http-client-extras-guava</artifactId>


=====================================
extras/jdeferred/pom.xml
=====================================
@@ -18,7 +18,7 @@
   <parent>
     <artifactId>async-http-client-extras-parent</artifactId>
     <groupId>org.asynchttpclient</groupId>
-    <version>2.12.2</version>
+    <version>2.12.3</version>
   </parent>
   <artifactId>async-http-client-extras-jdeferred</artifactId>
   <name>Asynchronous Http Client JDeferred Extras</name>


=====================================
extras/pom.xml
=====================================
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.asynchttpclient</groupId>
     <artifactId>async-http-client-project</artifactId>
-    <version>2.12.2</version>
+    <version>2.12.3</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>async-http-client-extras-parent</artifactId>


=====================================
extras/registry/pom.xml
=====================================
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.asynchttpclient</groupId>
     <artifactId>async-http-client-extras-parent</artifactId>
-    <version>2.12.2</version>
+    <version>2.12.3</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>async-http-client-extras-registry</artifactId>


=====================================
extras/retrofit2/pom.xml
=====================================
@@ -4,7 +4,7 @@
   <parent>
     <artifactId>async-http-client-extras-parent</artifactId>
     <groupId>org.asynchttpclient</groupId>
-    <version>2.12.2</version>
+    <version>2.12.3</version>
   </parent>
 
   <artifactId>async-http-client-extras-retrofit2</artifactId>


=====================================
extras/rxjava/pom.xml
=====================================
@@ -3,7 +3,7 @@
   <parent>
     <artifactId>async-http-client-extras-parent</artifactId>
     <groupId>org.asynchttpclient</groupId>
-    <version>2.12.2</version>
+    <version>2.12.3</version>
   </parent>
   <artifactId>async-http-client-extras-rxjava</artifactId>
   <name>Asynchronous Http Client RxJava Extras</name>


=====================================
extras/rxjava2/pom.xml
=====================================
@@ -3,7 +3,7 @@
   <parent>
     <artifactId>async-http-client-extras-parent</artifactId>
     <groupId>org.asynchttpclient</groupId>
-    <version>2.12.2</version>
+    <version>2.12.3</version>
   </parent>
   <artifactId>async-http-client-extras-rxjava2</artifactId>
   <name>Asynchronous Http Client RxJava2 Extras</name>


=====================================
extras/simple/pom.xml
=====================================
@@ -3,7 +3,7 @@
   <parent>
     <artifactId>async-http-client-extras-parent</artifactId>
     <groupId>org.asynchttpclient</groupId>
-    <version>2.12.2</version>
+    <version>2.12.3</version>
   </parent>
   <artifactId>async-http-client-extras-simple</artifactId>
   <name>Asynchronous Http Simple Client</name>


=====================================
extras/typesafeconfig/pom.xml
=====================================
@@ -4,7 +4,7 @@
   <parent>
     <artifactId>async-http-client-extras-parent</artifactId>
     <groupId>org.asynchttpclient</groupId>
-    <version>2.12.2</version>
+    <version>2.12.3</version>
   </parent>
 
   <artifactId>async-http-client-extras-typesafe-config</artifactId>


=====================================
netty-utils/pom.xml
=====================================
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.asynchttpclient</groupId>
     <artifactId>async-http-client-project</artifactId>
-    <version>2.12.2</version>
+    <version>2.12.3</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>async-http-client-netty-utils</artifactId>


=====================================
pom.xml
=====================================
@@ -4,7 +4,7 @@
 
   <groupId>org.asynchttpclient</groupId>
   <artifactId>async-http-client-project</artifactId>
-  <version>2.12.2</version>
+  <version>2.12.3</version>
   <packaging>pom</packaging>
 
   <name>Asynchronous Http Client Project</name>
@@ -34,7 +34,7 @@
     <connection>scm:git:git at github.com:AsyncHttpClient/async-http-client.git</connection>
     <developerConnection>scm:git:git at github.com:AsyncHttpClient/async-http-client.git</developerConnection>
     <url>https://github.com/AsyncHttpClient/async-http-client/tree/master</url>
-    <tag>async-http-client-project-2.12.2</tag>
+    <tag>async-http-client-project-2.12.3</tag>
   </scm>
 
   <distributionManagement>
@@ -466,7 +466,7 @@
     <surefire.redirectTestOutputToFile>true</surefire.redirectTestOutputToFile>
     <source.property>1.8</source.property>
     <target.property>1.8</target.property>
-    <netty.version>4.1.53.Final</netty.version>
+    <netty.version>4.1.60.Final</netty.version>
     <slf4j.version>1.7.30</slf4j.version>
     <reactive-streams.version>1.0.3</reactive-streams.version>
     <activation.version>1.2.2</activation.version>



View it on GitLab: https://salsa.debian.org/java-team/async-http-client/-/compare/d54316a49497cd20e4da30760716634de9db6c61...5c0dd2367890167815c82ac9512fbe508abb7df6

-- 
View it on GitLab: https://salsa.debian.org/java-team/async-http-client/-/compare/d54316a49497cd20e4da30760716634de9db6c61...5c0dd2367890167815c82ac9512fbe508abb7df6
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-java-commits/attachments/20210918/fc4eecb4/attachment.htm>


More information about the pkg-java-commits mailing list