diff --git a/.github/workflows/builds.yml b/.github/workflows/builds.yml
deleted file mode 100644
index 2586cf3c6f..0000000000
--- a/.github/workflows/builds.yml
+++ /dev/null
@@ -1,59 +0,0 @@
-name: Build Check
-
-on:
- schedule:
- - cron: '0 12 * * *'
-
-jobs:
- Verify:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v4
- - name: Grant Permission
- run: chmod +x ./mvnw
- - uses: actions/setup-java@v4
- with:
- distribution: 'corretto'
- java-version: '11'
- - name: Verify
- run: ./mvnw -B -ntp clean verify -DskipTests -Dgpg.skip=true
-
- RunOnLinux:
- runs-on: ubuntu-latest
- needs: Verify
- steps:
- - uses: actions/checkout@v4
- - name: Grant Permission
- run: chmod +x ./mvnw
- - uses: actions/setup-java@v4
- with:
- distribution: 'corretto'
- java-version: '11'
- - name: Run Tests
- run: ./mvnw -B -ntp test
-
- RunOnMacOs:
- runs-on: macos-latest
- needs: Verify
- steps:
- - uses: actions/checkout@v4
- - name: Grant Permission
- run: chmod +x ./mvnw
- - uses: actions/setup-java@v4
- with:
- distribution: 'corretto'
- java-version: '11'
- - name: Run Tests
- run: ./mvnw -B -ntp test
-
- RunOnWindows:
- runs-on: windows-latest
- needs: Verify
- steps:
- - uses: actions/checkout@v4
- - uses: actions/setup-java@v4
- with:
- distribution: 'corretto'
- java-version: '11'
- - name: Run Tests
- run: ./mvnw.cmd -B -ntp test
diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
deleted file mode 100644
index 1f49d31122..0000000000
--- a/.github/workflows/maven.yml
+++ /dev/null
@@ -1,55 +0,0 @@
-# This workflow is designed to build PRs for AHC. Note that it does not actually publish AHC, just builds and test it.
-# Docs: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven
-
-name: Build PR
-
-on:
- push:
- branches:
- - main
- pull_request:
-
- workflow_dispatch:
- inputs:
- name:
- description: 'Github Actions'
- required: true
- default: 'Github Actions'
-
-jobs:
- RunOnLinux:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v4
- - name: Grant Permission
- run: sudo chmod +x ./mvnw
- - uses: actions/setup-java@v4
- with:
- distribution: 'corretto'
- java-version: '11'
- - name: Run Tests
- run: ./mvnw -B -ntp clean test
-
- RunOnMacOs:
- runs-on: macos-latest
- steps:
- - uses: actions/checkout@v4
- - name: Grant Permission
- run: sudo chmod +x ./mvnw
- - uses: actions/setup-java@v4
- with:
- distribution: 'corretto'
- java-version: '11'
- - name: Run Tests
- run: ./mvnw -B -ntp clean test
-
- RunOnWindows:
- runs-on: windows-latest
- steps:
- - uses: actions/checkout@v4
- - uses: actions/setup-java@v4
- with:
- distribution: 'corretto'
- java-version: '11'
- - name: Run Tests
- run: ./mvnw.cmd -B -ntp clean test
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
deleted file mode 100644
index b175fa865c..0000000000
--- a/.github/workflows/release.yml
+++ /dev/null
@@ -1,52 +0,0 @@
-name: Release
-
-on:
- workflow_dispatch:
- inputs:
- name:
- description: 'Github Actions - Release'
- required: true
- default: 'Github Actions - Release'
-
-jobs:
-
- Publish:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v4
-
- - name: Grant Permission
- run: sudo chmod +x ./mvnw
-
- - uses: actions/setup-java@v4
- with:
- distribution: 'corretto'
- java-version: '11'
-
- - name: Remove old Maven Settings
- run: rm -f /home/runner/.m2/settings.xml
-
- - name: Maven Settings
- uses: s4u/maven-settings-action@v3.1.0
- with:
- servers: |
- [{
- "id": "ossrh",
- "username": "${{ secrets.OSSRH_USERNAME }}",
- "password": "${{ secrets.OSSRH_PASSWORD }}"
- }]
-
- - name: Import GPG
- uses: crazy-max/ghaction-import-gpg@v6.3.0
- with:
- gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }}
- passphrase: ${{ secrets.GPG_PASSPHRASE }}
-
- - name: Build
- run: mvn -ntp -B clean verify install -DskipTests
-
- - name: Publish to Maven Central
- env:
- GPG_KEY_NAME: ${{ secrets.GPG_KEY_NAME }}
- GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
- run: mvn -ntp -B deploy -DskipTests -Dgpg.keyname=${GPG_KEY_NAME} -Dgpg.passphrase=${GPG_PASSPHRASE}
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index d424b2597a..0000000000
--- a/.gitignore
+++ /dev/null
@@ -1,21 +0,0 @@
-*.class
-*~
-.*.swp
-.*.swo
-.loadpath
-.buildpath
-.classpath
-.project
-.settings
-.idea
-*.iml
-*.ipr
-*.iws
-nbproject
-.DS_Store
-target
-test-output
-MANIFEST.MF
-work
-atlassian-ide-plugin.xml
-/bom/.flattened-pom.xml
diff --git a/.mvn/jvm.config b/.mvn/jvm.config
deleted file mode 100644
index 32599cefea..0000000000
--- a/.mvn/jvm.config
+++ /dev/null
@@ -1,10 +0,0 @@
---add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED
---add-exports jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED
---add-exports jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED
---add-exports jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED
---add-exports jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED
---add-exports jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED
---add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED
---add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED
---add-opens jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED
---add-opens jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED
diff --git a/.mvn/wrapper/maven-wrapper.jar b/.mvn/wrapper/maven-wrapper.jar
deleted file mode 100644
index c1dd12f176..0000000000
Binary files a/.mvn/wrapper/maven-wrapper.jar and /dev/null differ
diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties
deleted file mode 100644
index 4a95a1367b..0000000000
--- a/.mvn/wrapper/maven-wrapper.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.6/apache-maven-3.9.6-bin.zip
-wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar
diff --git a/CHANGES.md b/CHANGES.md
deleted file mode 100644
index d548766a4e..0000000000
--- a/CHANGES.md
+++ /dev/null
@@ -1,29 +0,0 @@
-## From 2.2 to 2.3
-
-* New `isFilterInsecureCipherSuites` config to disable unsecure and weak ciphers filtering performed internally in Netty.
-
-## From 2.1 to 2.2
-
-* New [Typesafe config](https://github.com/lightbend/config) extra module
-* new `enableWebSocketCompression` config to enable per-message and per-frame WebSocket compression extension
-
-## From 2.0 to 2.1
-
-* AHC 2.1 targets Netty 4.1.
-* `org.asynchttpclient.HttpResponseHeaders` was [dropped](https://github.com/AsyncHttpClient/async-http-client/commit/f4786f3ac7699f8f8664e7c7db0b7097585a0786) in favor
- of `io.netty.handler.codec.http.HttpHeaders`.
-* `org.asynchttpclient.cookie.Cookie` was [dropped](https://github.com/AsyncHttpClient/async-http-client/commit/a6d659ea0cc11fa5131304d8a04a7ba89c7a66af) in favor
- of `io.netty.handler.codec.http.cookie.Cookie` as AHC's cookie parsers were contributed to Netty.
-* AHC now has a RFC6265 `CookieStore` that is enabled by default. Implementation can be changed in `AsyncHttpClientConfig`.
-* `AsyncHttpClient` now exposes stats with `getClientStats`.
-* `AsyncHandlerExtensions` was [dropped](https://github.com/AsyncHttpClient/async-http-client/commit/1972c9b9984d6d9f9faca6edd4f2159013205aea) in favor of default methods
- in `AsyncHandler`.
-* `WebSocket` and `WebSocketListener` methods were renamed to mention frames
-* `AsyncHttpClientConfig` various changes:
- * new `getCookieStore` now lets you configure a CookieStore (enabled by default)
- * new `isAggregateWebSocketFrameFragments` now lets you disable WebSocket fragmented frames aggregation
- * new `isUseLaxCookieEncoder` lets you loosen cookie chars validation
- * `isAcceptAnyCertificate` was dropped, as it didn't do what its name stated
- * new `isUseInsecureTrustManager` lets you use a permissive TrustManager, that would typically let you accept self-signed certificates
- * new `isDisableHttpsEndpointIdentificationAlgorithm` disables setting `HTTPS` algorithm on the SSLEngines, typically disables SNI and HTTPS hostname verification
- * new `isAggregateWebSocketFrameFragments` lets you disable fragmented WebSocket frames aggregation
diff --git a/LICENSE.txt b/LICENSE.txt
deleted file mode 100644
index 85a16d3d06..0000000000
--- a/LICENSE.txt
+++ /dev/null
@@ -1,13 +0,0 @@
- Copyright (c) 2014-2024 AsyncHttpClient Project. All rights reserved.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
diff --git a/LICENSES/LICENSE.zstd-jni.txt b/LICENSES/LICENSE.zstd-jni.txt
deleted file mode 100644
index 66abb8ae78..0000000000
--- a/LICENSES/LICENSE.zstd-jni.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-Zstd-jni: JNI bindings to Zstd Library
-
-Copyright (c) 2015-present, Luben Karavelov/ All rights reserved.
-
-BSD License
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
-* Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
-* Redistributions in binary form must reproduce the above copyright notice, this
- list of conditions and the following disclaimer in the documentation and/or
- other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/README.md b/README.md
deleted file mode 100644
index 0272134ed1..0000000000
--- a/README.md
+++ /dev/null
@@ -1,263 +0,0 @@
-# Async Http Client
-[](https://github.com/AsyncHttpClient/async-http-client/actions/workflows/builds.yml)
-
-
-Follow [@AsyncHttpClient](https://twitter.com/AsyncHttpClient) on Twitter.
-
-The AsyncHttpClient (AHC) library allows Java applications to easily execute HTTP requests and asynchronously process HTTP responses.
-The library also supports the WebSocket Protocol.
-
-It's built on top of [Netty](https://github.com/netty/netty). It's compiled with Java 11.
-
-## Installation
-
-Binaries are deployed on Maven Central.
-Add a dependency on the main AsyncHttpClient artifact:
-
-Maven:
-```xml
-
-
- org.asynchttpclient
- async-http-client
- 3.0.2
-
-
-```
-
-Gradle:
-```groovy
-dependencies {
- implementation 'org.asynchttpclient:async-http-client:3.0.2'
-}
-```
-
-### Dsl
-
-Import the Dsl helpers to use convenient methods to bootstrap components:
-
-```java
-import static org.asynchttpclient.Dsl.*;
-```
-
-### Client
-
-```java
-import static org.asynchttpclient.Dsl.*;
-
-AsyncHttpClient asyncHttpClient=asyncHttpClient();
-```
-
-AsyncHttpClient instances must be closed (call the `close` method) once you're done with them, typically when shutting down your application.
-If you don't, you'll experience threads hanging and resource leaks.
-
-AsyncHttpClient instances are intended to be global resources that share the same lifecycle as the application.
-Typically, AHC will usually underperform if you create a new client for each request, as it will create new threads and connection pools for each.
-It's possible to create shared resources (EventLoop and Timer) beforehand and pass them to multiple client instances in the config. You'll then be responsible for closing
-those shared resources.
-
-## Configuration
-
-Finally, you can also configure the AsyncHttpClient instance via its AsyncHttpClientConfig object:
-
-```java
-import static org.asynchttpclient.Dsl.*;
-
-AsyncHttpClient c=asyncHttpClient(config().setProxyServer(proxyServer("127.0.0.1",38080)));
-```
-
-## HTTP
-
-### Sending Requests
-
-### Basics
-
-AHC provides 2 APIs for defining requests: bound and unbound.
-`AsyncHttpClient` and Dsl` provide methods for standard HTTP methods (POST, PUT, etc) but you can also pass a custom one.
-
-```java
-import org.asynchttpclient.*;
-
-// bound
-Future whenResponse=asyncHttpClient.prepareGet("http://www.example.com/").execute();
-
-// unbound
- Request request=get("http://www.example.com/").build();
- Future whenResponse=asyncHttpClient.executeRequest(request);
-```
-
-#### Setting Request Body
-
-Use the `setBody` method to add a body to the request.
-
-This body can be of type:
-
-* `java.io.File`
-* `byte[]`
-* `List`
-* `String`
-* `java.nio.ByteBuffer`
-* `java.io.InputStream`
-* `Publisher`
-* `org.asynchttpclient.request.body.generator.BodyGenerator`
-
-`BodyGenerator` is a generic abstraction that let you create request bodies on the fly.
-Have a look at `FeedableBodyGenerator` if you're looking for a way to pass requests chunks on the fly.
-
-#### Multipart
-
-Use the `addBodyPart` method to add a multipart part to the request.
-
-This part can be of type:
-
-* `ByteArrayPart`
-* `FilePart`
-* `InputStreamPart`
-* `StringPart`
-
-### Dealing with Responses
-
-#### Blocking on the Future
-
-`execute` methods return a `java.util.concurrent.Future`. You can simply block the calling thread to get the response.
-
-```java
-Future whenResponse=asyncHttpClient.prepareGet("http://www.example.com/").execute();
- Response response=whenResponse.get();
-```
-
-This is useful for debugging but you'll most likely hurt performance or create bugs when running such code on production.
-The point of using a non blocking client is to *NOT BLOCK* the calling thread!
-
-### Setting callbacks on the ListenableFuture
-
-`execute` methods actually return a `org.asynchttpclient.ListenableFuture` similar to Guava's.
-You can configure listeners to be notified of the Future's completion.
-
-```java
- ListenableFuture whenResponse = ???;
- Runnable callback = () - > {
- try {
- Response response = whenResponse.get();
- System.out.println(response);
- } catch (InterruptedException | ExecutionException e) {
- e.printStackTrace();
- }
- };
-
- java.util.concurrent.Executor executor = ???;
- whenResponse.addListener(() - > ??? , executor);
-```
-
-If the `executor` parameter is null, callback will be executed in the IO thread.
-You *MUST NEVER PERFORM BLOCKING* operations in there, typically sending another request and block on a future.
-
-#### Using custom AsyncHandlers
-
-`execute` methods can take an `org.asynchttpclient.AsyncHandler` to be notified on the different events, such as receiving the status, the headers and body chunks.
-When you don't specify one, AHC will use a `org.asynchttpclient.AsyncCompletionHandler`;
-
-`AsyncHandler` methods can let you abort processing early (return `AsyncHandler.State.ABORT`) and can let you return a computation result from `onCompleted` that will be used
-as the Future's result.
-See `AsyncCompletionHandler` implementation as an example.
-
-The below sample just capture the response status and skips processing the response body chunks.
-
-Note that returning `ABORT` closes the underlying connection.
-
-```java
-import static org.asynchttpclient.Dsl.*;
-
-import org.asynchttpclient.*;
-import io.netty.handler.codec.http.HttpHeaders;
-
-Future whenStatusCode = asyncHttpClient.prepareGet("http://www.example.com/")
- .execute(new AsyncHandler () {
- private Integer status;
-
- @Override
- public State onStatusReceived(HttpResponseStatus responseStatus) throws Exception {
- status = responseStatus.getStatusCode();
- return State.ABORT;
- }
-
- @Override
- public State onHeadersReceived(HttpHeaders headers) throws Exception {
- return State.ABORT;
- }
-
- @Override
- public State onBodyPartReceived(HttpResponseBodyPart bodyPart) throws Exception {
- return State.ABORT;
- }
-
- @Override
- public Integer onCompleted() throws Exception{
- return status;
- }
-
- @Override
- public void onThrowable(Throwable t) {
- t.printStackTrace();
- }
- });
-
- Integer statusCode = whenStatusCode.get();
-```
-
-#### Using Continuations
-
-`ListenableFuture` has a `toCompletableFuture` method that returns a `CompletableFuture`.
-Beware that canceling this `CompletableFuture` won't properly cancel the ongoing request.
-There's a very good chance we'll return a `CompletionStage` instead in the next release.
-
-```java
-CompletableFuture whenResponse=asyncHttpClient
- .prepareGet("http://www.example.com/")
- .execute()
- .toCompletableFuture()
- .exceptionally(t->{ /* Something wrong happened... */ })
- .thenApply(response->{ /* Do something with the Response */ return resp;});
- whenResponse.join(); // wait for completion
-```
-
-You may get the complete maven project for this simple demo
-from [org.asynchttpclient.example](https://github.com/AsyncHttpClient/async-http-client/tree/master/example/src/main/java/org/asynchttpclient/example)
-
-## WebSocket
-
-Async Http Client also supports WebSocket.
-You need to pass a `WebSocketUpgradeHandler` where you would register a `WebSocketListener`.
-
-```java
-WebSocket websocket = c.prepareGet("ws://demos.kaazing.com/echo")
- .execute(new WebSocketUpgradeHandler.Builder().addWebSocketListener(
- new WebSocketListener() {
-
- @Override
- public void onOpen(WebSocket websocket) {
- websocket.sendTextFrame("...").sendTextFrame("...");
- }
-
- @Override
- public void onClose(WebSocket websocket) {
- // ...
- }
-
- @Override
- public void onTextFrame(String payload, boolean finalFragment, int rsv) {
- System.out.println(payload);
- }
-
- @Override
- public void onError(Throwable t) {
- t.printStackTrace();
- }
- }).build()).get();
-```
-
-## User Group
-
-Keep up to date on the library development by joining the Asynchronous HTTP Client discussion group
-
-[GitHub Discussions](https://github.com/AsyncHttpClient/async-http-client/discussions)
diff --git a/apidocs/allclasses-frame.html b/apidocs/allclasses-frame.html
new file mode 100644
index 0000000000..cb041ffc33
--- /dev/null
+++ b/apidocs/allclasses-frame.html
@@ -0,0 +1,300 @@
+
+
+
+
+
+
+
+All Classes (Asynchronous Http Client 1.7.0-SNAPSHOT API)
+
+
+
+
+
+
+
+
+
+
+
+All Classes
+
+
+
onContentWriteProgress(long amount,
+ long current,
+ long total)
+
+
+ Invoked when the I/O operation associated with the Request body as been progressed.
Invoked when an unexpected exception occurs during the processing of the response. The exception may have been
+ produced by implementation of onXXXReceived method invokation.
+