Commit Graph

3453 Commits

Author SHA1 Message Date
Arturo Bernal f203dcd34e Add AbstractBackoff, LinearBackoffManager, and ExponentialBackoffManager classes
- Create AbstractBackoff class as a base for different backoff strategies
- Add LinearBackoffManager class for implementing linear backoff algorithm in networking and communication systems. This class provides a thread-safe and configurable implementation of linear backoff, allowing for gradual adjustment of maximum connection pool sizes for a given route based on traffic and other factors. The class supports customizable cool-down periods and increment values for each route, and uses a ConcurrentHashMap to ensure thread safety and accurate tracking of backoff and probe attempts
- Implement ExponentialBackoffManager for connection pool control.
This commit introduces the ExponentialBackoffManager class, which manages the connection pool control for HTTP routes based on the Exponential Backoff algorithm. This implementation helps improve connection handling and stability in case of connection failures or network issues.
2023-08-12 17:14:53 +02:00
Arturo Bernal b565f8fab7 Improve AIMDBackoffManager with atomic references, thread-safety, and parameter checks
In this commit, we have made several improvements to the AIMDBackoffManager class:

* Replaced volatile variables with AtomicReference and AtomicInteger to ensure better thread-safety and atomic operations.
* Updated the @Contract annotation to reflect the new thread-safe behavior of the class.
 * Added parameter validation checks to public methods for better error handling and prevention of incorrect usage.
* Improved the code readability and organization by separating sections of the class with blank lines and consistent indentation.
* These enhancements make the AIMDBackoffManager class more robust, reliable, and easier to maintain.
2023-08-12 17:14:53 +02:00
Arturo Bernal 1bd7f07d17 Update NTCredentials to determine workstation name at runtime
This change modifies the NTCredentials class to determine the local workstation name at runtime or request time, in line with the underlying NTLM implementation. The deprecated constructor with the workstation parameter is replaced with a new constructor that does not require the workstation parameter. Instead, it automatically retrieves the workstation name using the getWorkstationName() method.
2023-08-12 17:14:53 +02:00
Arturo Bernal 94d73429dd Add DistributedProxySelector for efficient and thread-safe proxy selection
This commit introduces the DistributedProxySelector class, which enables efficient and thread-safe proxy selection among multiple ProxySelector instances. The new class ensures proper distribution of proxy selector usage with the help of AtomicInteger and maintains thread safety using ThreadLocal.

Key features and improvements:

Distributes proxy selection among multiple ProxySelector instances
Ensures thread safety by using ThreadLocal<ProxySelector>
Properly handles exceptions and connection failures
Comprehensive JavaDoc documentation for class, methods, and variables
Includes unit tests for various scenarios and edge cases
This new functionality provides a robust and efficient solution for distributing proxy selection in multi-threaded environments, improving the overall performance and reliability of the system.
2023-08-12 17:14:53 +02:00
Arturo Bernal 17da6d24ca Add support for preamble and epilogue in multipart entities
Previously, multipart entities did not support adding a preamble or epilogue to the message. This commit adds support for these features by modifying the AbstractMultipartFormat class to accept preamble and epilogue strings in its constructor. The HttpRFC6532Multipart, HttpRFC7578Multipart, and HttpStrictMultipart classes are updated to pass these parameters to the parent constructor when creating instances of multipart entities.

This change allows users to include custom content at the beginning and end of their multipart messages, which can be useful in certain scenarios such as adding metadata or information about the message contents.
2023-08-12 17:14:53 +02:00
Arturo Bernal 0df9e63932 Enhance ContentResponseHandler to be fault-tolerant
This commit enhances the `ContentResponseHandler` class to be more fault-tolerant by handling responses with null or empty bodies without throwing exceptions. If the response was successful (a 2xx status code), the `Content` object is returned. If no response body exists, `Content.NO_CONTENT` is returned.

The implementation extends `ContentResponseHandler` and overrides its methods to handle the response entity and transform it into the actual response object. This is designed to be efficient and use minimal memory.
2023-08-12 17:14:53 +02:00
Arturo Bernal efe57e03c6 Workaround for URL quoting issue with LLv6 host literals. Due to an issue with URL quoting for LLv6 host literals, the original implementation of SystemDefaultDnsResolver does not support constructing URLs with LLv6 literals that have a ZoneID. This commit implements a workaround that strips the ZoneID from LLv6 literals before resolving them. This allows URLs with LLv6 literals to be constructed without quoting the ZoneID. Note that this workaround does not fully comply with RFC 6874, but it should work in most cases. 2023-08-12 17:14:53 +02:00
Oleg Kalnichevski 95e8abbda8 BEARER auth scheme support (RFC 6750) 2023-08-12 17:14:53 +02:00
Oleg Kalnichevski 298506eb0e New Authenticator interface method to return an auth result with additional challenge parameters 2023-08-12 17:14:53 +02:00
Oleg Kalnichevski a4784916cc Made authenticating decorators capable of supporting different authentication schemes 2023-08-12 17:14:53 +02:00
Oleg Kalnichevski 2d77d1d579 Normalize scheme name in AuthScope 2023-08-12 17:14:53 +02:00
Oleg Kalnichevski ff35df66a5 Removed references in specific RFCs 2023-08-12 17:14:53 +02:00
Oleg Kalnichevski 55f86b9fd7 Credentials interface should be able to represent different types of user credentials including token based with no password 2023-08-12 17:14:53 +02:00
Oleg Kalnichevski c0194331c3 Upgraded project version to 5.3-alpha1-SNAPSHOT 2023-08-12 17:14:16 +02:00
Christoph Kaser 223669659c Check for timeToLive == 0
Allows setting connection timeToLive and validateAfterInactivity to zero to always close or validate a connection
2023-07-22 13:04:18 +02:00
John Vasileff d72a136817 Per RFC 7616, use the provided Response algorithm in the Request
For digest authentication, in RFC 7616 section "3.4 The Authorization
Header Field":

    The values of the opaque and algorithm fields must be those supplied
    in the WWW-Authenticate response header field for the entity being
    requested.

This commit honors that rule, and removes the previous behavior that
augmented the request header with "algorithm=MD5" when none was provided
in the server's response.

Aside from the specification, it also stands to reason that if the
server failed to provide "algorithm=..." in its "WWW-Authenticate"
header, the server should be fine with the client failing to provide
"algorithm=..." in the "Authorization" header.

The motivation for this change is that including "algorithm=MD5" in the
"Authorization" header causes http requests to fail when made to an
embedded system, which I suspect to be a an Espressif ESP32 web server.
2023-07-20 20:18:05 +02:00
Oleg Kalnichevski 9ad56ad734 Improvements in the ClientConfiguration sample app 2023-07-13 17:57:04 +02:00
Gary Gregory 09ae5f212a Mostly missing Javadoc in org.apache.hc.client5.http.entity and minor
clean ups
2023-07-02 16:31:07 -04:00
Gary Gregory 635f5f475b Bump Apache Log4j from 2.19.0 to 2.20.0
Bump Mockito from 4.8.1 to 4.11.0
2023-06-27 06:34:21 -04:00
Gary Gregory d9792ece6b Bump jna.version from 5.12.1 to 5.13.0 #407 2023-06-24 18:33:54 -04:00
dependabot[bot] 7261d403ff Bump jna.version from 5.12.1 to 5.13.0
Bumps `jna.version` from 5.12.1 to 5.13.0.

Updates `jna` from 5.12.1 to 5.13.0
- [Release notes](https://github.com/java-native-access/jna/releases)
- [Changelog](https://github.com/java-native-access/jna/blob/master/CHANGES.md)
- [Commits](https://github.com/java-native-access/jna/compare/5.12.1...5.13.0)

Updates `jna-platform` from 5.12.1 to 5.13.0
- [Release notes](https://github.com/java-native-access/jna/releases)
- [Changelog](https://github.com/java-native-access/jna/blob/master/CHANGES.md)
- [Commits](https://github.com/java-native-access/jna/compare/5.12.1...5.13.0)

---
updated-dependencies:
- dependency-name: net.java.dev.jna:jna
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: net.java.dev.jna:jna-platform
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-24 18:31:40 -04:00
Oleg Kalnichevski 9ecb02c610 Upgraded HttpCore to version 5.2.2 2023-06-19 19:37:40 +02:00
dependabot[bot] 5b61e132c3 Bump junit-bom from 5.9.1 to 5.9.3
Bumps [junit-bom](https://github.com/junit-team/junit5) from 5.9.1 to 5.9.3.
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.9.1...r5.9.3)

---
updated-dependencies:
- dependency-name: org.junit:junit-bom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-29 12:26:49 +02:00
Oleg Kalnichevski 3e38a5e5ec HTTPCLIENT-2271: Do not optimize the path component of the resolved URI by default. 2023-04-27 17:13:53 +02:00
Oleg Kalnichevski 48e4229843 HTTPCLIENT-2262: Corrected RequestConfig#connectionRequestTimeout javadocs 2023-03-17 11:23:07 +01:00
Arturo Bernal 5896c20cb3 Remove dependency not used 2023-03-13 15:43:31 +01:00
Michael Lee ec5b1f1d60 Hygiene - remove unused private fields 2023-03-13 15:43:31 +01:00
Alice Li cda24a64ba chore: update ClientProxyAuthenticationExample 2023-03-13 15:43:31 +01:00
Siva Kumar Edupuganti 8233c7343a Updated NOTICE to 2023 2023-03-13 15:43:31 +01:00
Arturo Bernal 078c7c7eb7 Remove unnecessary declarations. 2023-03-13 15:43:31 +01:00
MartinWitt f198fc0e62 Make inner classes static (#405) 2023-03-13 15:43:24 +01:00
Gary Gregory f78ec699ab Camel case names 2023-03-13 15:43:16 +01:00
Oleg Kalnichevski 1e164edc4f Upgraded HttpCore to version 5.2.1 2023-03-13 15:43:01 +01:00
Oleg Kalnichevski 50e5899e3a Upgraded API compatibility level to 5.2 2023-03-13 15:42:47 +01:00
Alen Turkovic 4695041df4 Pass HttpContext to SSLConnectionSocketFactory#prepareSocket method (#404) 2023-03-13 15:42:38 +01:00
Damiano Albani 3403571c18 Fix minor typo in Javadoc 2023-03-13 15:42:38 +01:00
Oleg Kalnichevski 22e5a0be6b Upgraded HttpClient version to 5.2.2-SNAPSHOT 2022-12-07 14:09:11 +01:00
Oleg Kalnichevski 8ca97f1474 Updated release notes for HttpClient 5.2.1 release 2022-12-03 14:09:19 +01:00
dependabot[bot] bfd2bf1f7e Bump ehcache-api from 3.10.2 to 3.10.8
Bumps [ehcache-api](https://github.com/ehcache/ehcache3) from 3.10.2 to 3.10.8.
- [Release notes](https://github.com/ehcache/ehcache3/releases)
- [Commits](https://github.com/ehcache/ehcache3/compare/v3.10.2...v3.10.8)

---
updated-dependencies:
- dependency-name: org.ehcache.modules:ehcache-api
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-26 10:57:16 +01:00
dependabot[bot] 1e879a2783 Bump actions/dependency-review-action from 2 to 3
Bumps [actions/dependency-review-action](https://github.com/actions/dependency-review-action) from 2 to 3.
- [Release notes](https://github.com/actions/dependency-review-action/releases)
- [Commits](https://github.com/actions/dependency-review-action/compare/v2...v3)

---
updated-dependencies:
- dependency-name: actions/dependency-review-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-26 10:56:23 +01:00
Oleg Kalnichevski cb80c3cc50 Disabled a test case that fails intermittently with GitHub Actions. 2022-11-26 10:54:05 +01:00
Oleg Kalnichevski 2f87e4a6b7 Regression: async execution runtimes set the negotiated protocol version in the execution context at the wrong point of request execution 2022-11-21 22:37:49 +01:00
Bryan Keller 9cde791f35 Cancel connection request on exception 2022-11-14 22:16:43 +01:00
Gary Gregory 290ec22022 Fix compiler warnings in tests
Use try-with-resources, also avoids possible leaks on test failures
2022-11-14 22:13:14 +01:00
Gary Gregory 230a2caf67 Replace deprecated use of LangUtils#equals() with Objects.equals() 2022-11-14 09:57:05 -05:00
Oleg Kalnichevski 0ca5635898 HTTPCLIENT-2247: Test cases to document present assumptions about the correct handling of public domain suffixes 2022-11-13 12:28:53 +01:00
Oleg Kalnichevski 32228cd4ff Regression: Multipart body builder and multipart formatters fail to escape special characters such as backslash and quote mark 2022-11-13 12:28:51 +01:00
Oleg Kalnichevski e52ff02f74 Upgraded HttpClient version to 5.2.1-SNAPSHOT 2022-11-13 12:28:46 +01:00
Oleg Kalnichevski 58a9438a23 Updated release notes for HttpClient 5.2 release 2022-11-06 22:54:45 +01:00
Oleg Kalnichevski e458cb93e0 Upgraded HttpCore to version 5.2 2022-11-06 16:27:15 +01:00