Release 5.2 ALPHA1
------------------

This is the first ALPHA release in the 5.2 release series that includes a number of
new features as well as bug fixes from the stable 5.0.x and 5.1.x branches.

* Let TimeValue/Timeout convert to and from Duration. #263.
  Contributed by Gary Gregory <garydgregory at gmail.com>

* Add URIBuilder#getFirstQueryParam(String) to query a parameter by name. #264.
  Contributed by Gary Gregory <garydgregory at gmail.com>

* Bug fix: TextUtils.toHexString(byte[]) returned wrong result for negative byte values

Release 5.1
-----------

This is the first GA release in the 5.1 release series.

Notable changes and features included in the 5.1 series:

* Conditional conformance with RFC 3986 (Uniform Resource Identifier (URI): Generic Syntax).

* Improved support for out of sequence response message handing by the the classic (blocking)
  HTTP transport.

* Improved message builders.


Change Log
-------------------

* Bug fix: HTTP negotiator factories to accept null TlsStrategy.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* RequestHandlerRegistry to resolve 127.0.0.1 as primary host.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-667, HTTPCORE-668, HTTPCORE-670: Added content type and HTTP header constants.
  Contributed by Arturo Bernal <arturobernalg at gmail.com>

* RFC 3986 conformance: BasicHttpRequest to reject requests whose path component begins with
  multiple slashes.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* RFC 3986 conformance: BasicHttpRequest to support parsing of valid URI authority components
  not recognized by java.net.URI.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Improved message builder support.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-666, regression: fixed NPE in ServerHttp1IOEventHandlerFactory.
  Contributed by Oleg Kalnichevski <olegk at apache.org>


Release 5.1 BETA3
------------------

This is likely the last BETA release in the 5.1 release series. The next release is
expected to be 5.1 GA. This beta includes a number of new features as well as
bug fixes from the stable 5.0.x branch.

Notable changes and features included in the 5.1 series:

* Conditional conformance with RFC 3986 (Uniform Resource Identifier (URI): Generic Syntax).

* Improved support for out of sequence response message handing by the the classic (blocking)
  HTTP transport.


Change Log
-------------------

* RFC 3986 conformance: Added `#normalizeSyntax` method to URIBuilder.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-663: Added http status code 425.
  Contributed by Arturo Bernal <arturobernalg at gmail.com>

* HTTPCORE-661: Added http status code 426.
  Contributed by Arturo Bernal <arturobernalg at gmail.com>

* HTTPCORE-659: Fixed race condition in IOSessionImpl when setting event.
  Contributed by Nicolas Capponi <nicolas.capponi at forgerock.com>

* HTTPCORE-658: Removed explicit inbound / outbound socket shutdown from
  the `#close` method of classic HTTP connections.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-657: Added TrafficClass to IOReactorConfig (#243).
  Contributed by Desmond Yeung <dyeung at datto.com>

* Add filters before MAIN_HANDLER so they won't be ignored (#236).
  Contributed by Rob Spoor <robtimus at users.noreply.github.com>

* Bug fix: Fixed broken result callback in ProtocolNegotiatorBase.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Fixed NPE and improve code centralization in URIBuilder (#235).
  Contributed by Lars Helge Øverland <lars at dhis2.org>

* Added `#appendPath` and `#appendPathSegments` methods to URIBuilder (#234).
  Contributed by Lars Helge Øverland <lars at dhis2.org>

* Removed connection acceptor API changes (moved to 5.2).
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Removed protocol upgrade API changes (moved to 5.2).
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Bug fix: Do not attempt to shut down non-blocking TLS session gracefully
  in case the TLS handshake has not been fully completed.
  Contributed by Oleg Kalnichevski <olegk@apache.org>


Release 5.1 BETA2
------------------

This is the second BETA release in the 5.1 release series that includes a number of
new features as well as bug fixes from the stable 5.0.x branch.

Notable changes and features included in the 5.1 series:

* Application protocol upgrade support for non-blocking HTTP/1.1 connections.

Change Log
-------------------

* PR #232: Master try w res and more.
  - Use try-with-resources.
  - Use diamonds.
  - Add missing @Override.
  - Make better use of Map APIs.
  - Remove redundant modifiers.
  - Use Collections.addAll() API instead of loops.
  - Remote extra semicolons (;).
  Contributed by Gary Gregory <garydgregory at gmail.com>

* Bug fix: Fixed ignoring maxResultLength in toString method of EntityUtils.
  Contributed by Klaw <Klawrar at gmail.com>

* Bug fix: corrected handling of pushed stream refusal by the HTTP/2 protocol handler.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Improved connection re-use (keep-alive) tracking by the benchmark; disabled H2 push
  when running the benchmark with HTTP/2.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Improved detection of disconnected endpoints by HttpAsyncRequester.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-626: in case of an unsuccessful `expect-continue` handshake do not make any
  attempts to keep the client connection in a consistent state if the server intends
  to close it on its end.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Move decision if the i/o session is to be terminated immediately to the protocol
  handler by default attempt to terminate the i/o session gracefully.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Optimized request termination by the non-blocking HTTP/1.1 protocol handler in case of
  a premature response or `expect-continue` handshake failure.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* `AbstractAsyncResponseConsumer` to handle gracefully an inconsistent state caused by
  the caller signalling a response with no entity but subsequently calling methods
  to consume data.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Revised HTTP protocol negotiation for non-blocking I/O sessions
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Revised TLS session initialization in I/O reactor code
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-653: CancelledKeyException triggers I/O reactor shutdown.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Make `ReactiveDataConsumer#failed` a no-op if it has already been marked as complete
  (#227).
  Contributed by Colin Weld <c_weld at backblaze.com>

* HTTPCORE-644: non-blocking TLSv1.3 connections can end up in an infinite event spin
  when closed concurrently by the local and the remote endpoints.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Calculate pendingOutputRequests before calling produceOutput to avoid race condition.
  Contributed by Colin Weld <c_weld at backblaze.com>


Release 5.1 BETA1
------------------

This is the first BETA release in the 5.1 release series that includes a number of
new features as well performance optimizations in the classic HTTP transport.

Notable changes and features included in the 5.1 series:

* Conditional conformance with RFC 3986 (Uniform Resource Identifier (URI): Generic Syntax).

* Improved support for out of sequence response message handing by the the classic (blocking)
  HTTP transport.


Change Log
-------------------

* HTTPCORE-649: Implement ByteArrayBuffer.append(ByteBuffer)
  Contributed by Carter Kozak <ckozak at apache.org>

* Use decimal numbers for endpoint/execution IDs
  Contributed by Michael Osipov <michaelo at apache.org>

* HTTPCORE-645: Increase blocking default chunk size from 2 KiB to 8 KiB.
  Contributed by Carter Kozak <ckozak at apache.org>

* HTTPCORE-645: Chunked request streams reuse buffers between requests.
  Contributed by Carter Kozak <ckozak at apache.org>

* HTTPCORE-639: Add a configurable ResponseOutOfOrder strategy for DefaultBHttpClientConnection.
  Contributed by Carter Kozak <ckozak at apache.org>

* RFC 3986 conformance: Support percent-encoded reserved characters in the host component.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* RFC 3986 conformance: Revised URI parsing and formatting.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Better parse and format methods for URIAuthority.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-628: Do not encode blanks as + in URI query component.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Async connection listeners to support passing attachments to endpoints.
  Contributed by Oleg Kalnichevski <olegk at apache.org>



Release 5.0.2
------------------

This release reverts changes to early response handling logic introduced in 5.0.1
and fixes a number of minor defects. Improvement of the early response handling
by the classic client protocol handler has been moved to 5.1.

Please also note that as of this release HttpCore will use a 3 minute socket timeout
by default.

Change Log
-------------------

* HTTP/1.1 protocol handlers fail to consistently set actual protocol version in
  the execution context.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-648: Buffer array access respects the arrayOffset (#220).
  Contributed by Carter Kozak <ckozak at ckozak.net>

* HTTPCORE-646: ChunkedInputStream avoids creating unnecessary buffers.
  Contributed by Carter Kozak <ckozak at ckozak.net>

* Revert "Improved handling of early response messages by the classic client protocol handler".
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-638: SharedOutputBuffer must trigger DataStreamChannel#endStream() once (#204).
  Contributed by malaysf <malayshah at gmail.com>

* Fixed integer overflow in IOWorkers selector (#203).
  Contributed by Pavel kaplin <pavel.kaplin@gmail.com>

* HTTPCLIENT-2098: EntityUtils#toByteArray method fails to take into account
  `maxResultLength` parameter (#202).
  Contributed by Andriy <a.mahats at gmail.com>

* Add Automatic-Module-Name to the manifest.
  Contributed by Niels Basjes <niels at basjes.nl>

* HTTPCORE-636: Logging statements use slf4j interpolation over concatenation (#199).
  Contributed by Carter Kozak <ckozak at ckozak.net>

* HTTPCLIENT-2091: Use finite (3 minutes) socket timeout by default.
  Contributed by Oleg Kalnichevski <olegk at apache.org>



Release 5.0.1
------------------

This release improves handling of early response messages by the classic client protocol handler
and fixes a number of minor defects.

Change Log
-------------------

* Add handling of early response messages by the classic client protocol handler.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-631: Revised i/o reactor shutdown sequence and resource de-allocation.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Fix CharArrayBuffer.subSequence(beganIndex,endIndex) to return right result.
  Contributed by Lee Ray <liruigo at gmail.com>

* Added exception callback to async server implementations enabling logging of unexpected and
  fatal exceptions in the server side protocol handlers.
  Contributed by Oleg Kalnichevski <olegk at apache.org>


Release 5.0
------------------

This is the first stable (GA) release of HttpCore 5.0.

Notable changes and features included in the 5.0 series:

* Support for HTTP/2 protocol and conformance to requirements and recommendations
  of the latest HTTP/2 protocol specification (RFC 7540, RFC 7541)

  Supported features:

    ** HPACK header compression
    ** stream multiplexing (client and server)
    ** flow control
    ** response push (client and server)
    ** message trailers
    ** expect-continue handshake
    ** connection validation (ping)
    ** application-layer protocol negotiation (ALPN) on Java 9+
    ** TLS 1.2 security features

   Features out of scope for 5.0 release:

    ** padding of outgoing frames
    ** stream priority
    ** plain connection HTTP/1.1 upgrade
    ** CONNECT method

* Improved conformance to requirements and recommendations of the latest HTTP/1.1 protocol
  specification (RFC 7230, RFC 7231)

* New asynchronous HTTP transport APIs consistent for both HTTP/1.1 and HTTP/2 transport.

* Redesigned I/O reactor APIs and improved NIO based reactor implementation for a greater
  performance and scalability.

* Support for server-side request filters for classic and asynchronous server implementations.
  Request filters could be used to implement cross-cutting protocol aspects such
  as the 'expect-continue' handshaking and user authentication / authorization.

* Support for Reactive Streams API [http://www.reactive-streams.org/]

* Redesigned connection pool implementation with strict connection limit guarantees.
  The connection pool is expected to have a better performance under higher concurrency
  due to reduced global pool lock contention.

* New connection pool implementation with lax connection limit guarantees and better
  performance under higher concurrency due to absence of a global pool lock.

* Package name space changed to 'org.apache.hc.core5'

* Maven group id changed to 'org.apache.httpcomponents.core5'

HttpCore 5.0 releases can be co-located with earlier versions.


Change Log
-------------------

* GitHub #183: IO reactor status equality clean ups.
  Contributed by Gary Gregory <garydgregory at gmail.com>

* HTTPCORE-623 GitHub #185: Change org.apache.hc.core5.http.io.BHttpConnection.isDataAvailable() int input to Timeout.
  Contributed by Gary Gregory <garydgregory at gmail.com>

* GitHub #188: Add PathEntity, a Path based implementation of HttpEntity. (#188)
  Contributed by Gary Gregory <garydgregory at gmail.com>
  
* GitHub #191: Add org.apache.hc.core5.http.Method.normalizedValueOf(String).
  Contributed by Gary Gregory <garydgregory at gmail.com>

* GitHub #193: Reuse constants instead of magic strings.
  Contributed by Gary Gregory <garydgregory at gmail.com>


Release 5.0-BETA11
------------------

This BETA improves handling of illegal or invalid requests on the server-side and fixes a number
of defects in HTTP/2 protocol code found since the last release.

IMPORTANT: This release is expected to be the last BETA version. If no major
design flaws are found, the actual 5.0 API will be frozen and the next version will be
promoted to GA.


Change Log
-------------------

* HTTPCORE-618: org.apache.hc.core5.http.HttpStatus should be a class, not an interface.
  Contributed by Gary Gregory <garydgregory at gmail.com>

* HTTPCORE-619: org.apache.hc.core5.reactor.EventMask should be a class, not an interface.
  Contributed by Gary Gregory <garydgregory at gmail.com>

* Normalize TimeUnit in TimeValue's #equals() and #hashCode().
  Contributed by Michael Osipov <michaelo at apache.org>

* Support for status code 431 (Request Header Fields Too Large) by H2 server-side protocol handler
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Enforce H2 SETTINGS_MAX_HEADER_LIST_SIZE limit for HTTP/2 messages.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Improved H2 connection window management logic.
  Contributed by Ryan Schmitt <rschmitt at apache.org>

* Use UTF-8 encoding for XML-based content types.
  Contributed by Michael Osipov <michaelo at apache.org>

* Bug-fix: H2 protocol handler to reset all streams unconditionally in case of an unexpected
  exception and attempt to close the i/o session gracefully if possible.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Support for status code 431 (Request Header Fields Too Large).
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Corrected handling of illegal or invalid request heads by async server-side protocol handler
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Bug-fix: Fixed race condition in ReactiveDataConsumer.
  Contributed by Ryan Schmitt <rschmitt at apache.org>

* Bug-fix: Fixed H2 SETTINGS_HEADER_TABLE_SIZE negotiation.
  Contributed by Ryan Schmitt <rschmitt at apache.org>

* Bug-fix: Fixed empty response handling in ReactiveResponseConsumer.
  Contributed by Ryan Schmitt <rschmitt at apache.org>

* Allow for timeout while acquiring lock in StrictConnPool.
  Contributed by Chris Wildman <chriswildman at chriswildman.com>

* Added H2 config option to disable Huffman compression
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-613: Now allowing 0 for validaterAfterInactivity.
  Contributed by Peter Frank <IMATOOL13 at gmail.com>

* HTTPCLIENT-2029: URIBuilder to support parsing of non-UTF8 URIs.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCLIENT-2026: Fixed URIBuilder#isOpaque() logic.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-611: Minor glitches with TimeValue.
  Contributed by Gary Gregory <garydgregory at gmail.com>



Release 5.0-BETA10
-------------------

This BETA fixes a number of defects found since the last release.

IMPORTANT: This release is expected to be the last BETA version. If no major
design flaws are found, the actual 5.0 API will be frozen and the next version will be
promoted to GA.


Change Log
-------------------

* HTTPCORE-608: Fixes regression that can lead to performance degradation of
  asynchronous HTTP/1.1 protocol handlers.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-606: HTTP/2 protocol handler incorrectly uses larger frame size prior
  to SETTING handshake completion; revision of SETTINGS handshake implementation.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Bug fix: HTTP/2 Protocol handler does not update global connection output window
  in some cases.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Upgraded Conscrypt dependency to version 2.2.1
  Contributed by Oleg Kalnichevski <olegk at apache.org>



Release 5.0-BETA9
-------------------

This BETA fixes a number of defects found since the last release, improves behavior
of the lax (concurrent) connection pools (special thanks to Linton Miller), simplifies
and improves input event handling of SSL/TLS sessions and the HTTP/1.1 protocol event
handler.

Please note that the following interfaces have marked as internal as of this release:
IOSession, IOEventHandler, IOEventHandlerFactory.

IMPORTANT: This release is expected to be the last BETA version. If no major
design flaws are found, the actual 5.0 API will be frozen and the next version will be
promoted to GA.


Change Log
-------------------

* HTTPCORE-604: async HTTP/1.1 protocol handler must close the i/o session if it cannot 
  be kept alive before passing control to the message exchange hanlder.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Simplification of HTTP/1.1 read event handling logic.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Redesign of SSL/TLS async I/O event handling.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCLIENT-2016 (regression): Tab chars are replaced by question marks in header values.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Bug fix: Fixed capacity calculation in SessionInputBufferImpl#put.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Marked IOSession, IOEventHandler and IOEventHandlerFactory interfaces as internal.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Propagate BasicResponse{Consumer,Producer}#failed() to data{Consumer,Producer}.
  Contributed by Roy Hashimoto <roy at shoestringresearch.com>

* Regression: Fixed regression in SingleCoreIOReactor leading to unhandled CancelledKeyException
  and causing abnormal I/O reactor termination.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-601: Work-around for SSL session spin on outbound session closure with Conscrypt 2.2.1.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-600: SSLIOSession incorrectly disables input interest when there is still decrypted data
  available in the session input buffer.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Added statusClass property to StatusLine.
  Contributed by Behrang <18451+behrangsa at users.noreply.github.com>

* HTTPCORE-596: Connection pools to use an optional callback to close out disposed connections.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Connection pools to close connections gracefully in case of an ordinary connection disposal.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-599: I/O sessions to stop reading from the underlying network channel of READ interest
  is disabled.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* TimeValue to implement Comparable.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-597: AsyncEntityProducers#createText always throws IllegalArgumentException.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-595: Tolerate NPE thrown by com.android.org.conscrypt.NativeCrypto#SSL_get_shutdown
  in Android Conscrypt.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Set accessibility flag on reflected methods in ReflectionUtils.
  Contributed by Richard Hernandez <riher at amazon.com>

* Restore original socket timeout after finishing SSL/TLS handshake.
  Contributed by Richard Hernandez <riher at amazon.com>

* Add SOAP XML content type.
  Contributed by Raihaan Shouhell <raihaanhimself at gmail.com>

* HTTPCORE-593, HTTPCORE-592, HTTPCORE-590, HTTPCORE-589: LaxConnPool improvements.
  Contributed by Linton Miller <linton.miller at coxautoinc.com>

* HTTPCORE-588: Race condition in ComplexCancellable that can lead to operational dependency
  not being correctly cancelled.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Execute Socket[Channel]#connect under doPrivileged.
  Contributed by Simon Willnauer <simonw at apache.org>

* Fail request execution immediately after submission if the I/O session has already been closed.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Bug fix: Fixed regression in the HTTP protocol negotiators.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Bug fix: MessageSupport#formatTokens no longer modifies the array of tokens passed to it
  as a parameter.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-586: Improve LaxConnPool max pool size management.
  Contributed by Linton Miller <linton.miller at coxautoinc.com>

* HTTPCORE-585: Fix LaxConnPool#servicePendingRequest to avoid losing pending lease requests
  it can't fulfill.
  Contributed by Linton Miller <linton.miller at coxautoinc.com>

* Possible fix for iteration thread-safety issue.
  Contributed by Linton Miller <linton.miller at coxautoinc.com>

* SSL session verifier for classic HTTP requester.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Bug fix: non-blocking I/O event handler may be null in case of an unexpected exception.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Bug fix: Corrected immediate termination of non-blocking I/O sessions.
Contributed by Oleg Kalnichevski <olegk at apache.org>

* Bug fix: Ensure consistency of internal buffers in case of I/O or SSL exception.
Contributed by Oleg Kalnichevski <olegk at apache.org>



Release 5.0-BETA8
-------------------

This BETA fixes a number of defects found since the last release and adds several
convenience factory and builder classes, mainly for TLS configuration and HTTP
message construction.

As of this version all server and requester implementations exclude weak TLS protocol
versions and ciphers.

Please note that the following interfaces have changed: ResponseChannel,
AsyncRequestConsumer, AsyncResponseConsumer, HttpContentProducer, SSLServerSetupHandler.

IMPORTANT: This release is expected to be the last BETA version. If no major
design flaws are found the actual 5.0 API will be frozen and the next version will be
promoted to GA.


Change Log
-------------------

* HTTPCORE-582: Fixed NPE in SingleCoreIOReactor#processEvents
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Redesign of fatal exception handling by the I/O reactors
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-581: Wrong deadline calculation for non-blocking I/O operations
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Better HttpVersion and ProtocolVersion. (#131)
  Contributed by Gary Gregory <garydgregory at gmail.com>

* Classic and async message builders.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Improved classic and async entity factory methods.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-578: Incorrect serialization of HeaderGroup.
  Contributed by Gary Gregory <garydgregory at gmail.com>

* HTTPCORE-577: server-side HTTP protocol negotiator to propagate exceptions
  to the I/O event handler associated with the I/O session.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCLIENT-1986: URIBuilder#isPathEmpty method to verify if encodedPath
  is an empty string.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* SSLIOSession: Improve connectTimeout implementation.
  Contributed by Ryan Schmitt <rschmitt at apache.org>

* HTTPCLIENT-1981: Disallow TRACE requests with an enclosed entity.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCLIENT-1978: Filter characters before byte conversion.
  Contributed by Ryan Schmitt <rschmitt at apache.org>

* HTTPCORE-573: FileContentDecoder don't always enforce the maximum number of
  bytes to transfer.
  Contributed by Julien Coloos <julien.coloos at gmail.com>

* All server and requester implementation to exclude weak TLS protocol versions
  and ciphers.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Improved SSL setup handling for classic requester and server.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Common TLS support methods migrated from HttpClient.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Bug fix: non-blocking SSL I/O sessions fail to fire session disconnected event.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Bug fix: basic entity consumers to clear buffered content when releasing resources.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* conscrypt-openjdk-uber 1.4.1 -> 1.4.2.
  Contributed by Gary Gregory <garydgregory at gmail.com>

* Provide more information when a BindException occurs.
  Contributed by Gary Gregory <garydgregory at gmail.com>

* Refactor ClassicHttpRequest and ClassicHttpResponse interfaces to extend
  a new interface HttpEntityContainer.
  Contributed by Gary Gregory <garydgregory at gmail.com>
  
* Update RxJava from 2.2.7 to 2.2.8.
  Contributed by Gary Gregory <garydgregory at gmail.com>


Release 5.0-BETA7
-------------------

This BETA release adds support for SOCKS version 5, improves support for TLS
handshake timeout configuration, improves URI builder, and fixes various defects.

Please note that the following interfaces have changed: TlsStrategy, IOSession,
TransportSecurityLayer.


Change Log
-------------------

* Add a thread-safe capacity channel to AbstractHttp1StreamDuplexer
  Contributed by Richard Hernandez <riher at amazon.com>

* HTTPCORE-568: Signal capacity in ReactiveDataConsumer whenever possible (fixes a race condition)
  Contributed by Richard Hernandez <riher at amazon.com>

* Made standard HttpEntity implementations immutable / conditionally immutable
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCLIENT-1968: URIBuilder to split path component into path segments when digesting a URI
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCLIENT-1968: added utility methods to parse and format URI path segments
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Added SOCKS proxy support to classic (blocking) HTTP requester
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Made AbstractBinAsyncEntityProducer and AbstractCharAsyncEntityProducer conditionally threading-safe
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Added convenience method to test if ContentType instances are of the same MIME type
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Merge connect and handshake timeouts in AbstractIOSessionPool
  Contributed by Ryan Schmitt <rschmitt at apache.org>

* HTTPCLIENT-1960: URIBuilder incorrect handling of multiple leading slashes in path component
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCLIENT-1959: corrected argument validation in HttpHost constructors; removed deprecated methods
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* org.apache.hc.core5.reactor.IOSession: Deprecate lock() in favor of getLock(). Add missing @Override.
  Contributed by Gary Gregory <garydgregory at gmail.com>

* HTTPCORE-563: client support for SOCKS version 5
  Contributed by David Maplesden <david at maplesden.co.nz>

* Delay I/O operations on non-blocking SSL sessions until fully initialized
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Add `handshakeTimeout` support throughout
  Contributed by Ryan Schmitt <rschmitt at apache.org>

* Updated the set of project report generated by Maven
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* SSLIOSession: Add `connectTimeout` constructor param
  Contributed by Ryan Schmitt <rschmitt at apache.org>

* Update RxJava from 2.1.9 to 2.2.7.
  Contributed by Gary Gregory <garydgregory at gmail.com>


Release 5.0-BETA6
-------------------

This BETA release adds support for advanced TLS functions (such as ALPN protocol negotiation)
on Java 1.7 and Java 1.8 through Conscrypt TLS library, and fixes a number of defects found
since the previous release.

Please note AsyncDataConsumer interface has been changed in order to make it simpler to implement.
However existing AsyncDataConsumer might require minor modifications.


Change Log
-------------------

* Removed OSGi module.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Added support for advanced TLS functions (such as ALPN extension) on Java 1.7 and Java 1.8
  through Conscrypt TLS library.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTP/1.1 and HTTP/2 async protocol handlers to use I/O session lock for output synchronization.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Bug fix: non-blocking HTTP/1.1 server-side streams incorrectly report their keep-alive status.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Bug fix: fixed a race condition in non-blocking HTTP/1.1 protocol handlers causing premature
  clearing of output interest.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Simplified AsyncDataConsumer interface contract
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-560: Fix LaxConnPool leasing incorrect PoolEntry when processing pending requests
  Contributed by Desmond Yeung <dyeung at datto.com>

* Deprecate and rename org.apache.hc.core5.util.Timeout.ofMillis(long) to ofMilliseconds(long).
  Contributed by Gary Gregory <ggregory at apache.org>

* Deprecate and rename org.apache.hc.core5.util.TimeValue.ofMillis(long) to ofMilliseconds(long).
  Contributed by Gary Gregory <ggregory at apache.org>

* Fix org.apache.hc.core5.util.TimeValue.convert(TimeUnit).
  Contributed by Gary Gregory <ggregory at apache.org>

* Add org.apache.hc.core5.util.TimeValue.divide(*).
  Contributed by Gary Gregory <ggregory at apache.org>
  
* org.apache.hc.core5.http.URIScheme.getId()
  Contributed by Gary Gregory <ggregory at apache.org>
  
* HTTPCORE-562: The reason phrase returned by org.apache.hc.core5.http.HttpResponse.getReasonPhrase()
  may be empty.
  Contributed by Gary Gregory <ggregory at apache.org>

* TimeValue can parse more leniently: Allow spaces and singular words for time units,
  for example " 1 SECOND ".
  Contributed by Gary Gregory <ggregory at apache.org>
  
* Add HttpStreamResetException.serialVersionUID 
  Contributed by Gary Gregory <ggregory at apache.org>
  
* Add org.apache.hc.core5.http.HttpRequest.setUri(URI)
  Contributed by Gary Gregory <ggregory at apache.org>

* org.apache.hc.core5.net.URIBuilder.setHttpHost(HttpHost)
  Contributed by Gary Gregory <ggregory at apache.org>

* Deprecate constructors in org.apache.hc.core5.http.HttpHost that do not have the scheme argument
  first in favor of new constructors that do.
  Contributed by Gary Gregory <ggregory at apache.org>

* Add org.apache.hc.core5.http.HttpHost.create(URI)
  Contributed by Gary Gregory <ggregory at apache.org>

* Keep the entries in org.apache.hc.core5.http.protocol.UriPatternMatcher#map in insertion order.
  Contributed by Gary Gregory <ggregory at apache.org>


Release 5.0-BETA5
-------------------

This BETA release fixed a severe regression introduced in 5.0-BETA4.


Release 5.0-BETA4
-------------------

This BETA release adds support for Reactive Streams API [http://www.reactive-streams.org/] and
fixes compatibility issues with Java 11 new TLS engine as well as a number of defects found
since the previous release.

This release also includes a redesigned HTTP stress test tool loosely based on
Apache Benchmark (AB) command interface with support for HTTP/2.


Change Log
-------------------

* Resolved compatibility issues with TLS 1.3 engine shipped with Java 11
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Bug fix: corrected handling of FORCE_HTTP2 version policy by the server-side protocol negotiator
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Redesign of the internal HTTP benchmark loosely based on AB, added support for HTTP/2
  stress testing.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Regression: fixed the response connection control interceptor incorrectly using
  'Connection: keep-alive' directive with HTTP/1.0 requests that do not have
  an explicit 'Connection' request header.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-552, HTTPCORE-553, HTTPCORE-554, HTTPCORE-555, HTTPCORE-556, HTTPCORE-557, HTTPCORE-558:
  added status codes 103, 208, 226, 308, 451, 506, 508, 510
  Contributed by sparsick <sparsic at @web.de> and Georg Berky <georg.berky at posteo.de>

* HTTPCLIENT-1942: Add support for Reactive Streams
  Contributed by Ryan Schmitt <ryansch at amazon.com>

* Respect CloseMode when closing async TCP sockets
  Contributed by Ryan Schmitt <ryansch at amazon.com>

* Fix typo in message generated by org.apache.hc.core5.io.SocketTimeoutExceptionFactory.toMessage(int).
  Contributed by Gary Gregory <ggregory at apache.org>

* Update the org.apache.hc.core5.http.protocol.HttpContext.setAttribute(String, Object) API to return the previous value.
  Contributed by Gary Gregory <ggregory at apache.org>

* Deprecate and rename org.apache.hc.core5.http.EndpointDetails.getSocketTimeout() to getSocketTimeoutMillis().
  Contributed by Gary Gregory <ggregory at apache.org>
  
* Deprecate and rename org.apache.hc.core5.http.MessageHeaders.getAllHeaders() to getHeaders(). 
  Contributed by Gary Gregory <ggregory at apache.org>

* Deprecate and rename org.apache.hc.core5.http.MessageHeaders.getSingleHeaders(String) to getHeader(String). 
  Contributed by Gary Gregory <ggregory at apache.org>


Release 5.0-BETA3
-------------------

This BETA release fixes a number of defects found since the previous release, adds several
incremental improvements and improves Javadoc documentation.

Change Log
-------------------

* Improved information responses (1xx) processing.
  Contributed by Kirill Usov <kirill.usov at gmail.com>

* Bug fix: fixed AbstractAsyncResponseConsumer to handle null callback parameter
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Bug fix: HTTP stream handlers no longer call #failed event of the associated exchange handler when
  the message exchange has already been completed.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Bug fix: fixed NPE caused by null timeout attribute of IOSessionRequest
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Bug fix: fixed incorrect propagation of exception cause in case of an HTTP protocol violation during
  HTTP protocol version negotiation
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Workaround for misbehaved servers that return HTTP 204 responses with a content
  Contributed by Alessandro Gherardi <alessandro.gherardi at schneider-electric.com>

* HTTPCORE-510: Avoid an ArithmeticException in AbstractMultiworkerIOReactor by failing earlier by checking
  ioThreadCount in IOReactorConfig constructor.
  Contributed by Gary Gregory <ggregory at apache.org>

* HTTPCORE-511: Do not cache result of Runtime.getRuntime().availableProcessors() in IOReactorConfig.
  Contributed by Gary Gregory <ggregory at apache.org>

* HTTPCORE-509: AVAIL_PROCS is auto-configured based on core count.
  Contributed by Gary Gregory <ggregory at apache.org>

* HTTPCORE-514: Exceptions defined by HttpCore should clean message strings when built to replace non-printable
  characters with hex values.
  Contributed by Gary Gregory <ggregory at apache.org>

* HTTPCORE-517: Allow SecurityManager to stop socket connections.
  Contributed by Gary Gregory <ggregory at apache.org> and Paul Thompson <pathompson at atlassian dot com>
  
* HTTPCORE-537: org.apache.hc.core5.http.message.BasicHttpResponse.toString() prints its code twice and
  no protocol version.
  Contributed by Gary Gregory <ggregory at apache.org>
  
* HTTPCORE-539: Constructing a new FileEntityProducer for a file whose length is greater than 2GB throws
  an IllegalArgumentException.
  Contributed by Gary Gregory <ggregory at apache.org>

* HTTPCORE-540: EndpointDetails implements HttpConnectionMetrics.
  Contributed by Gary Gregory <ggregory at apache.org>
  
* HTTPCORE-541: Add HttpVersion.ALL for all HTTP versions known to HttpCore.  
  Contributed by Gary Gregory <ggregory at apache.org>

* HTTPCORE-542: Add missing org.apache.hc.core5.http.message.BasicClassicHttpRequest.serialVersionUID
  Contributed by Gary Gregory <ggregory at apache.org>
  
* HTTPCORE-544: Add org.apache.hc.core5.http.EndpointDetails.getSocketTimeout()
  Contributed by Gary Gregory <ggregory at apache.org>
  
* HTTPCORE-545: Add org.apache.hc.core5.http.message.HeaderGroup.removeHeaders(Header)
  Contributed by Gary Gregory <ggregory at apache.org>
  
* HTTPCORE-546: Update org.apache.hc.core5.http.message.HeaderGroup.removeHeader(Header) to return a boolean  
  Contributed by Gary Gregory <ggregory at apache.org>

* HTTPCORE-547: Update org.apache.hc.core5.http.message.HeaderGroup.removeHeaders(String) to return a boolean
  Contributed by Gary Gregory <ggregory at apache.org>
  
* HTTPCORE-548: Add missing HttpContext parameter to APIs.
  Contributed by Gary Gregory <ggregory at apache.org>
  
* Refactor duplicate messages into a new 0-arg constructor for StreamClosedException.
  Contributed by Gary Gregory <ggregory at apache.org>

* Refactor timeout APIs to include the actual timeout value.
  Contributed by Gary Gregory <ggregory at apache.org>

* Refactor timeout APIs to include the scale in the method name; for example 'int getSocketTimeout()'
  vs. int 'getSocketTimeoutMillis()'.
  Contributed by Gary Gregory <ggregory at apache.org>

* HTTPCORE-550: When a ParseException is caught and rethrown as an IOException in ChunkDecoder#processFooters(),
  the IOException does not chain the original ParseException.
  Contributed by Gary Gregory <ggregory at apache.org>

* Request specific push consumers
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCLIENT-1927: URLEncodedUtils#parse breaks at double quotes when parsing unquoted values
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-528: SSL I/O session spins upon abnormal connection closure by the opposite endpoint.
  Contributed by Oleg Kalnichevski <olegk at apache.org>


Release 5.0-BETA2
-------------------

This BETA release fixes a number of defects found since the previous release and
adds several incremental improvements.

Notable changes and features included in the 5.0 series:

* Support for HTTP/2 protocol and conformance to requirements and recommendations
  of the latest HTTP/2 protocol specification (RFC 7540, RFC 7541)

  Supported features:

    ** HPACK header compression
    ** stream multiplexing (client and server)
    ** flow control
    ** response push (client and server)
    ** message trailers
    ** expect-continue handshake
    ** connection validation (ping)
    ** application-layer protocol negotiation (ALPN) on Java 9+
    ** TLS 1.2 security features

   Features out of scope for 5.0 release:

    ** padding of outgoing frames
    ** stream priority
    ** plain connection HTTP/1.1 upgrade
    ** CONNECT method

* Improved conformance to requirements and recommendations of the latest HTTP/1.1 protocol
  specification (RFC 7230, RFC 7231)

* New asynchronous HTTP transport APIs consistent for both HTTP/1.1 and HTTP/2 transport.

* Redesigned I/O reactor APIs and improved NIO based reactor implementation for a greater
  performance and scalability.

* Support for server-side request filters for classic and asynchronous server implementations.
  Request filters could be used to implement cross-cutting protocol aspects such
  as the 'expect-continue' handshaking and user authentication / authorization.

* Redesigned connection pool implementation with strict connection limit guarantees.
  The connection pool is expected to have a better performance under higher concurrency
  due to reduced global pool lock contention.

* New connection pool implementation with lax connection limit guarantees and better
  performance under higher concurrency due to absence of a global pool lock.

* Package name space changed to 'org.apache.hc.core5'

* Maven group id changed to 'org.apache.httpcomponents.core5'

HttpCore 5.0 releases can be co-located with earlier versions.

The 5.0 APIs are considered feature complete and are not expected to undergo any major changes
anymore. The focus of development is now shifting to API polish, code stabilisation
and documentation improvements.


Change Log
-------------------

* HTTP/2 multiplexed requester to support cancellation of individual message exchanges without termination
  of the underlying I/O session.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Bug fix: corrected handling of GOAWAY frames by HTTP/2 stream multiplexer
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Bug fix: prevent a tight loop in non-blocking SSL I/O sessions due to a HTTP/2 frame fragment in the SSL
  input buffer.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Bug fix: incorrect handing of premature I/O session termination by the server-side application protocol
  negotiator.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Strict / lax ALPN handshake mode for HTTP/2 multiplexing requester.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-496: Add API org.apache.http.protocol.UriPatternMatcher.entrySet().
  Contributed by Gary Gregory <ggregory at apache.org>

* HTTPCORE-499 Make interface Header extend NameValuePair
  Contributed by Gary Gregory <ggregory at apache.org>

* HTTPCORE-501 org.apache.http.client.utils.URLEncodedUtils.parse() 
  should return a new ArrayList when there are no query parameters.
  Contributed by Gary Gregory <ggregory at apache.org>


Release 5.0-BETA1
-------------------

This is a major release that renders HttpCore API incompatible with the stable 4.x branch
and upgrades HTTP/1.1 and HTTP/2 protocol conformance to the requirements and recommendations
of the latest protocol specification.

Notable new features in this release:

* New HTTP/2 requester optimized for multiplexed execution of requests.

Notable changes and features included in the 5.0 series:

* Support for HTTP/2 protocol and conformance to requirements and recommendations
  of the latest HTTP/2 protocol specification (RFC 7540, RFC 7541)

  Supported features:

    ** HPACK header compression
    ** stream multiplexing (client and server)
    ** flow control
    ** response push (client and server)
    ** message trailers
    ** expect-continue handshake
    ** connection validation (ping)
    ** application-layer protocol negotiation (ALPN) on Java 9+
    ** TLS 1.2 security features

   Features out of scope for 5.0 release:

    ** padding of outgoing frames
    ** stream priority
    ** plain connection HTTP/1.1 upgrade
    ** CONNECT method

* Improved conformance to requirements and recommendations of the latest HTTP/1.1 protocol
  specification (RFC 7230, RFC 7231)

* New asynchronous HTTP transport APIs consistent for both HTTP/1.1 and HTTP/2 transport.

* Redesigned I/O reactor APIs and improved NIO based reactor implementation for a greater
  performance and scalability.

* Support for server-side request filters for classic and asynchronous server implementations.
  Request filters could be used to implement cross-cutting protocol aspects such
  as the 'expect-continue' handshaking and user authentication / authorization.

* Redesigned connection pool implementation with strict connection limit guarantees.
  The connection pool is expected to have a better performance under higher concurrency
  due to reduced global pool lock contention.

* New connection pool implementation with lax connection limit guarantees and better
  performance under higher concurrency due to absence of a global pool lock.

* Package name space changed to 'org.apache.hc.core5'

* Maven group id changed to 'org.apache.httpcomponents.core5'

HttpCore 5.0 releases can be co-located with earlier versions.

The 5.0 APIs are considered feature complete and are not expected to undergo any major changes
anymore. The focus of development is now shifting to API polish, code stabilisation
and documentation improvements.


Change Log
-------------------

* HTTP/2 multiplexing requester.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Compatibility with Java 9 (tested with Oracle JDK 9.0.1).
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Fixed handling of relative request paths in BasicHttpRequest.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-494: Add image constants to ContentType.
  Contributed by Gary Gregory <ggregory at apache.org>

* HTTPCORE-486: set a time limit on processing of pending I/O events by I/O reactors.
  Contributed by xiaohu-zhang <silver9886@126.com>



Release 5.0-ALPHA4
-------------------

This is a major release that renders HttpCore API incompatible with the stable 4.x branch
and upgrades HTTP/1.1 and HTTP/2 protocol conformance to the requirements and recommendations
of the latest protocol specification.

Notable changes and features included in the 5.0 series are:

* Support for HTTP/2 protocol and conformance to requirements and recommendations
  of the latest HTTP/2 protocol specification (RFC 7540, RFC 7541)

  Supported features:

    ** HPACK header compression
    ** stream multiplexing (client and server)
    ** flow control
    ** response push (client and server)
    ** message trailers
    ** expect-continue handshake
    ** connection validation (ping)
    ** application-layer protocol negotiation (ALPN) on Java 1.9+
    ** TLS 1.2 security features

   Features out of scope for 5.0 release:

    ** padding of outgoing frames
    ** stream priority
    ** plain connection HTTP/1.1 upgrade
    ** CONNECT method

* Improved conformance to requirements and recommendations of the latest HTTP/1.1 protocol
  specification (RFC 7230, RFC 7231)

* New asynchronous HTTP transport APIs consistent for both HTTP/1.1 and HTTP/2 transport.

* Redesigned I/O reactor APIs and improved NIO based reactor implementation for a greater
  performance and scalability.

* Support for server-side request filters for classic and asynchronous server implementations.
  Request filters could be used to implement cross-cutting protocol aspects such
  as the 'expect-continue' handshaking and user authentication / authorization.

* Redesigned connection pool implementation with strict connection limit guarantees.
  The connection pool is expected to have a better performance under higher concurrency
  due to reduced global pool lock contention.

* New connection pool implementation with lax connection limit guarantees and better
  performance under higher concurrency due to absence of a global pool lock.

* Package name space changed to 'org.apache.hc.core5'

* Maven group id changed to 'org.apache.httpcomponents.core5'

HttpCore 5.0 releases can be co-located with earlier versions.

Please note that at this point 5.0 APIs are considered API experimental and unstable and are
expected to change in the coming releases without providing a migration path.


Change Log
-------------------

* HTTPCORE-485: Reduced memory footprint of non-blocking SSL sessions by 25%.
  Contributed by Todor Bonchev <31352118+todorbonchev at users.noreply.github.com>

* Fixed propagation of entity details of incoming HTTP/1.1 messages by non-blocking HTTP/1.1
  stream duplexer
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Configurable connection pool concurrency policy
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-390: Connection pool implementation with higher concurrency characteristics
  and lax total and per route max guarantees.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Request filters for classic and asynchronous server-side protocol handlers
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Improved handling of 1xx status messages by the classic transport; server expectation
  (expect-continue) handshake can now be implemented as a cross-cutting aspect by both
  the classic and asynchronous transports
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Fixed bug in the classic (blocking) HTTP requester causing incorrect release of connections
  in case a response message has no entity (such as 204)
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-454: use Timeout class to represent timeout values
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Made HTTP/2 data window update precede sending of the DATA frame to the opposite endpoint.
  In some extreme circumstances the opposite endpoint can send back a WINDOW_UPDATE frame
  in-between of these two operation causing the data window value to exceed its maximum
  valid value
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* I/O interest flag in IOSessionImpl requires synchronization instead of atomic operation
  in order to avoid race condition
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-472: Fixed problem with blocking message parsers incorrectly throwing
  "Maximum line length limit exceeded" exception in some corner cases
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Improved I/O reactor APIs with a smaller public API footprint
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Rewrite of I/O reactor internal channel management; more efficient handling of outgoing
  connection requests
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Fixed delineation of 200 status message in response to CONNECT method
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-468: Allow HttpAsyncService subclasses to customize the HTTP status code.
  Contributed by Gary Gregory <ggregory at apache.org>

* HTTPCORE-471: Add APIs URIBuilder.localhost() and setHost(InetAddress)
  Contributed by Gary Gregory <ggregory at apache.org>

* HTTPCORE-466: Round out the SslContextBuilder by adding missing APIs.
  Contributed by Gary Gregory <ggregory at apache.org>



Release 5.0-ALPHA3
-------------------

This is a major release that renders HttpCore API incompatible with the stable 4.x branch
and upgrades HTTP/1.1 and HTTP/2 protocol conformance to the requirements and recommendations
of the latest protocol specification.

Notable changes and features included in the 5.0 series are:

* Partial support for HTTP/2 protocol and conformance to requirements and
  recommendations of the latest HTTP/2 protocol specification (RFC 7540, RFC 7541)

  Supported features:

    ** HPACK header compression
    ** stream multiplexing (client and server)
    ** flow control
    ** response push (client and server)
    ** message trailers
    ** expect-continue handshake
    ** connection validation (ping)
    ** application-layer protocol negotiation (ALPN) on Java 1.9+
    ** TLS 1.2 security features

   Unsupported features:

    ** padding of outgoing frames
    ** stream priority
    ** plain connection HTTP/1.1 upgrade
    ** CONNECT method

* Improved conformance to requirements and recommendations of the latest HTTP/1.1 protocol
  specification (RFC 7230, RFC 7231)

* New asynchronous HTTP transport APIs consistent for both HTTP/1.1 and HTTP/2 transport.

* Improved HTTP/1.1 and HTTP/2 requester and server implementations.

* Redesigned connection pool implementation with reduced pool lock contention.

* Plug-in mechanism for HTTP/1.1 protocol switch / upgrade.

* Package name space changed to 'org.apache.hc.core5'

* Maven group id changed to 'org.apache.httpcomponents.core5'

HttpCore 5.0 releases can be co-located with earlier versions.

Please note that as of 5.0 HttpCore requires Java 1.7 or newer.

Please note that at this point 5.0 APIs are considered API experimental and unstable and are
expected to change in the coming releases without providing a migration path.


Change Log
-------------------

* Support for HTTP protocol version negotiation.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Support TLS ALPN and disable TLS renegotiation via reflection on Java 1.9+.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-452: Add a UriRegexMatcher.
  Contributed by Gary Gregory <ggregory at apache.org>

* HTTPCORE-453: ServerBootstrap should traverse handler map in insertion order.
  Contributed by Gary Gregory <ggregory at apache.org>

* HTTPCORE-451: Add a TimeValue class to wrap a long and a TimeUnit.
  Contributed by Gary Gregory <ggregory at apache.org>

* Fixed HTTP/2 server-side response message delineation when replying to HEAD requests.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Rewrite of non-blocking HTTP/1.1 connection persistence and re-use code.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* API for graceful shutdown of processes or endpoints
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-450: Add a Provider parameter in SSLContextBuilder.
  Contributed by lujianbo <387852424 at qq dot com>, Gary Gregory <ggregory at apache.org>

* Improved handling of premature HTTP/1.1 stream termination by non-blocking
  protocol handlers.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Non-blocking connection initializer to support multi-homed remote endpoints.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-458: Validate port values
  Contributed by Gary Gregory <ggregory at apache.org>
  

Release 5.0-ALPHA2
-------------------

This is a major release that renders HttpCore API incompatible with the stable 4.x branch
and upgrades HTTP/1.1 and HTTP/2 protocol conformance to the requirements and recommendations
of the latest protocol specification.

Notable changes and features included in the 5.0 series are:

* Partial support for HTTP/2 protocol and partial conformance to requirements and
  recommendations of the latest HTTP/2 protocol specification (RFC 7540, RFC 7541)

  Supported features:

    ** HPACK header compression
    ** stream multiplexing (client and server)
    ** flow control
    ** response push (client and server)
    ** message trailers
    ** expect-continue handshake
    ** connection validation (ping)
    ** TLS 1.2 features

   Unsupported features:

    ** application-layer protocol negotiation (ALPN)
    ** padding of outgoing frames
    ** stream priority
    ** plain connection HTTP/1.1 upgrade
    ** CONNECT method
    ** TLS renegotiation and compression cannot be disabled with Java 1.7 JSSE APIs

* Improved conformance to requirements and recommendations of the latest HTTP/1.1 protocol
  specification (RFC 7230, RFC 7231)

* New asynchronous HTTP transport APIs consistent for both HTTP/1.1 and HTTP/2 transport.

* Improved HTTP/1.1 and HTTP/2 requester and server implementations.

* Redesigned connection pool implementation with reduced pool lock contention.

* Support for HTTP/1.1 protocol switch / upgrade.

* Package name space changed to 'org.apache.hc.core5'

* Maven group id changed to 'org.apache.httpcomponents.core5'

HttpCore 5.0 releases can be co-located with earlier versions.

Please note that as of 5.0 HttpCore requires Java 1.7 or newer.

Please note that at this point 5.0 APIs are considered API experimental and unstable and are
expected to change in the coming releases without providing a migration path.


Change Log
-------------------

* HTTPCORE-424: added ConnPool policy parameter to control connection re-use policy.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-413: Minimal chunk side can now be specified as H1Config#chunkSizeHint.
  The value is treated as a hint. Both classic and NIO attempt to apply it when sending / receiving
  messages without providing a strict guarantee.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-429: NIO connection pool incorrectly reports the number of pending connections
  per individual route.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-432: HTTP/2 support.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-418: Add a HttpHost constructor for hostname and scheme.
  Based on contribution by Joshua Hendrickson <joshua dot hendrickson at live dot com>
  
* HTTPCORE-436: Port tests from Apache Commons Logging to Apache Log4j 2.
  Contributed by Gary Gregory <ggregory at apache.org>

* HTTPCORE-434: Corrected handling of HEAD responses without payload headers.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-427: SSL I/O sessions to use a finite timeout for SSL shutdown handshake when closing.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-422: HttpAsyncResponseConsumer#onEntityEnclosed is triggered for HEAD responses.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-420: Blocking HttpServer does not close out persistent connection when shut down.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-417: SSLIOSession#writePlain incorrectly handles closed channel condition leading
  to an infinite loop.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-416: DefaultConnectingIOReactor to treat failure to open a channel for a new outgoing
  connection as a recoverable request failure.
  Contributed by Oleg Kalnichevski <olegk at apache.org>


Release 5.0-ALPHA1
-------------------

This is a major release that renders HttpCore API incompatible with the stable 4.x branch
and upgrades HTTP/1.1 protocol conformance to the requirements and recommendations of the latest
protocol specification. This release lays the foundation for transition to HTTP/2 as the primary
transport protocol in the future releases.

Notable changes and features included in the 5.0 series are:

* Improved conformance to requirements and recommendations of the latest HTTP/1.1 protocol 
  specification (RFC 7230, RFC 7231)

* Blocking I/O and NIO HTTP transport implementation has been folded into one module

* Package name space changed to 'org.apache.hc.core5' 

* Maven group id changed to 'org.apache.httpcomponents.core5' 

HttpCore 5.0 releases can be co-located with earlier versions.

Please note that as of 5.0 HttpCore requires Java 1.7 or newer.

Please note that at this point 5.0 APIs are considered API experimental and unstable and are
expected to change in the coming releases without providing a migration path.


Change Log
-------------------

* PATCH method support
  Contributed by Ömer Özkan <omer at ozkan.info>

* HTTPCORE-412: Support for trailing headers in outgoing HTTP messages
  Based on contribution by Daneel Yaitskov <rtfm.rtfm.rtfm at gmail.com>

* HTTPCORE-411, RFC 7320, RFC 7321: Made Expect-Continue handshake compliant with the spec
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Fixed handling of pipelined HEAD requests
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-409: NIO HttpServer does not shutdown listener ExecutorService
  Contributed by Hiranya Jayathilaka <hiranya at apache.org>

* HTTPCORE-406: PAX-EXAM tests with an embedded HTTP server
  Contributed by Benson Margulies <benson at basistech.com>

* RFC 7230: increased the default max number of concurrent connection for the same route from 2 to 5
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* RFC 7230: improved compliance of the default connection re-use strategy
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* RFC 7230: reject HTTP/1.1 requests with absent Host header or multiple Host headers
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* RFC 7230: permit some empty lines before message head
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* RFC 7230: disallow multiple Content-Length headers / header elements
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* RFC 7230: reject headers containing whitespaces between the header field name and colon in strict mode
  (when parsing request messages on the server-side)
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* RFC 7230: reject messages with incompatible major protocol version
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTP/2: added immutable MessageHead interface common for both HTTP/1.1 and HTTP/2 messages
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-396: PrivateKeyStrategy does not work with NIO SSL
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* RFC 7230: it is legal for any request method to enclose an entity; revised message delineation logic;
  removed HttpEntityEnclosingRequest interface; fixes HTTPCORE-318, HTTPCORE-380
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Use CharSequence instead of CharArrayBuffer for header element parsing
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* TokenParser to use CharSequence instead of CharArrayBuffer
  Contributed by Oleg Kalnichevski <olegk at apache.org>




Release 4.4.4
-------------------

This is a maintenance release that fixes a number of issues discovered since 4.4.3.

Please note that as of 4.4 HttpCore requires Java 1.6 or newer.


Change Log
-------------------

* [HTTPCORE-410] PoolStats made Serializable
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* BufferedHttpEntity to use HttpEntity#writeTo when buffering non-repeatable entities
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Fixed race condition in request initialization code in async client protocol handlers
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Fixed handling of pipelined HEAD requests
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-409] NIO HttpServer does not shutdown listener ExecutorService 
  Contributed by Hiranya Jayathilaka <hiranya at apache.org>


Release 4.4.3
-------------------

This is a maintenance release that fixes a regression introduced by release 4.4.2.

Please note that as of 4.4 HttpCore requires Java 1.6 or newer.


Change Log
-------------------

* Fixed regression introduced by HTTPCORE-399. 
  Contributed by Oleg Kalnichevski <olegk at apache.org>


Release 4.4.2
-------------------

This maintenance release fixes a bug in HTTP request pipelining code discovered 
after 4.4.1 release.

Please note that as of 4.4 HttpCore requires Java 1.6 or newer.


Change Log
-------------------

* Throw ConnectionClosedException instead of IllegalStateException if an attempt is made to 
  use a closed (not bound to a socket) blocking connection.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-399] Non-blocking client connections incorrectly suspend output causing 
  sequential execution of requests. 
  Contributed by Oleg Kalnichevski <olegk at apache.org>


Release 4.4.1
-------------------

This maintenance release fixes a number of minor bugs found since 4.4.

Please note that as of 4.4 HttpCore requires Java 1.6 or newer.


Change Log
-------------------

* [HTTPCORE-396]: PrivateKeyStrategy does not work with NIO SSL.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-395]: VersionInfo#getUserAgent reports incorrect Java version.
  Contributed by Michael Osipov <michaelo at apache.org>

* Non-blocking connection should not trigger end-of-stream callback as long as there is still
  data in the session input buffer. This can cause a series of short pipelined requests to
  fail prematurely in case of an unexpected connection termination by the opposite endpoint. 
  Contributed by Oleg Kalnichevski <olegk at apache.org>


Release 4.4
-----------------

This is the first stable (GA) release of HttpCore 4.4. Notable features included in 
the 4.4 series are:

* Support for pipelined request processing on the server-side

* Support for pipelined request execution on the client side

* Simplified bootstrapping of blocking and non-blocking (NIO) HTTP server implementations   

* Inclusion of SSL context initialization utilities from HttpClient

Please note that as of 4.4 HttpCore requires Java 1.6 or newer.


Change Log
-------------------

* Performance optimizations
  Contributed by Dmitry Potapov <dpotapov at yandex-team.ru>

* Update Apache Commons Logging version from 1.1.3 to 1.2. 
  Contributed by Gary Gregory <ggregory at apache.org>


Release 4.4-BETA1
-------------------

This is the first BETA release from 4.4 release series. Notable features included in 
the 4.4 series are:

* Support for pipelined request processing on the server-side

* Support for pipelined request execution on the client side

* Simplified bootstrapping of blocking and non-blocking (NIO) HTTP server implementations   

* Inclusion of SSL context initialization utilities from HttpClient

* New HTTP element tokenizer implementation 


Please note that as of 4.4 HttpCore requires Java 1.6 or newer.




Release 4.4-ALPHA1
-------------------

This is the first release from the 4.4.x development branch. The most notable features included in 
this release are:

* Support for pipelined request processing on the server-side

* Support for pipelined request execution on the client side

* Simplified bootstrapping of blocking and non-blocking (NIO) HTTP server implementations   

This release also includes all fixes from the stable 4.2.x release branch.


Change Log
-------------------

* [HTTPASYNC-77] system resources are not correctly deallocated if I/O reactor is shut down
  while still inactive (not started)
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-377] Allow zero SO_LINGER (immediate abortive close).
  Contributed by Dmitry Potapov <potapov.d at gmail.com>

* [HTTPCORE-376] AbstractNIOConnPool#requestCancelled() should not process pending requests
  wnen being shut down.
  Contributed by Dmitry Potapov <potapov.d at gmail.com>

* [HTTPASYNC-69]: async request handler is closed by HttpAsyncRequestExecutor#closed 
  if the underlying connection is found to be in an inconsistent state.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-372] Blocking and non-blocking chunk decoders to throw an I/O exception if data stream
  is terminated without a closing chunk.
  Contributed by Dmitry Potapov <potapov.d at gmail.com>

* [HTTPCORE-368] Customizable buffer management strategies for SSLIOSession.
  Contributed by offbynull <offbynull at gmail.com>

* [HTTPCORE-358] Added I/O reactor listener backlog parameter.
  Contributed by Dmitry Potapov <potapov.d at gmail.com>

* [HTTPCORE-357] Avoid DNS lookups in SSLIOSession.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Update JUnit to version 4.11 from 4.9  
  Contributed by Gary Gregory <ggregory at apache.org>



Release 4.3.2
-------------------

This maintenance release fixes a number of bugs and regressions found since 4.3.1, mostly in the 
NIO transport components. All users of HttpCore 4.3 are advised to upgrade.

Change Log
-------------------

* [HTTPCORE-371] Support for SSL re-negotiation with NIO.
  Contributed by Asankha Perera <asankha at apache.org>

* [HTTPCORE-373] Out of sequence HTTP response causes NPE in HttpAsyncRequestExecutor.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-370] Race condition if connection request succeeds and times out at the same time.  
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* (Regression) Fixed synchronization issue in blocking and non-blocking connection pool 
  implementations caused by HTTPCORE-362
  Contributed by Oleg Kalnichevski <olegk at apache.org>


Release 4.3.1
-------------------

This maintenance release fixes a number of bugs and regressions found since 4.3, mostly in the 
NIO transport components. All users of HttpCore 4.3 are advised to upgrade.

Change Log
-------------------

* [HTTPCORE-367] (Regression) Non-blocking connections can enter a tight loop while waiting 
  for a chunk header split across multiple TCP frames.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-366] Non-blocking SSLIOSession can enter an infinite loop if the underlying
  channel receives incoming data simultaneously with inactivity timeout.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-364] IOSessionImpl.getLocalAddress() (etc.) creates unnecessary copy of channel

* DefaultConnectingIOReactor / DefaultListeningIOReactor do not correctly apply some initial 
  socket settings.
  Contributed by Andreas Veithen <veithen at apache.org>

* [HTTPCORE-357] Avoid DNS lookups in SSLIOSessions in server mode.
  Contributed by Isaac Cruz Ballesteros <icruzbal at gmail.com>

* [HTTPCORE-362] Purge pool per route map after closing out expired or idle connections with 
  #closeExpired and #closeIdle methods. 
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-361] Reduced intermediate garbage in HeaderGroup#getFirstHeader()
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-355] HttpAsyncRequestExecutor fails when its handler is not ready to generate
  a request.
  Contributed by jd <j1234d2003 at yahoo.com>

* [HTTPCORE-354] BasicConnFactory don't use SocketConfig#isSoKeepAlive.
  Contributed by David Ignjic <ignjic at gmail.com>

* [HTTPCORE-347] (Regression) HttpResponse#setStatusCode() does not update reason phrase.
  Contributed by Oleg Kalnichevski <olegk at apache.org>



Release 4.3
-------------------

This is the first stable (GA) release of HttpCore 4.3. The most notable features in the 4.3
branch are:

* Deprecation of preference and configuration API based on HttpParams interface in favor of
  constructor injection and plain configuration objects.

* Reliance on object immutability instead of access synchronization for thread safety.
  Several old classes whose instances can be shared by multiple request exchanges have
  been replaced by immutable equivalents.

The 4.3 branch also contains performance optimizations such as reduced TCP packet fragmentation
and more efficient lease / release operations for pools of persistent connections on the client
side.

This release also includes all fixes from the 4.2.x release branch.

Users of HttpCore 4.2 are encouraged to upgrade.


Change Log
-------------------

* [HTTPCORE-343] AbstractNIOConnPool to fire request callbacks outside the pool lock.
  This makes it possible to re-enter pool methods from a callback event.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-340] AbstractNIOConnPool to support lease timeout distinct from connect timeout.
  Contributed by Ignat Alexeyenko <ignatalexeyenko at gmail.com>

* Blocking connections do not clean session input buffer when closed (input data from a read
  operation may still remain in the buffer if the connection is re-opened).
  Contributed by Oleg Kalnichevski <olegk at apache.org>



Release 4.2.5
-------------------

This maintenance release fixes a number of bugs found in NIO components since 4.2.4. We advise
users of HttpCore NIO of all versions to upgrade.

This is likely to be the last release in the 4.2.x branch.


Change Log
-------------------

* [HTTPCORE-345] EntityAsyncContentProducer fails to release resources allocated by the underlying
  entity when #produceContent is never invoked.
  Contributed by Tad Whitenight <tadwhitenight at gmail.com>

* Non-blocking connection pool to avoid scanning the entire queue of pending connection requests
  on each connection lease / release operation (under heavy load the request queue can contain
  a significant number of pending requests, a full linear scan of which can cause massive
  performance degradation).
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Use bulk ByteBuffer#put method instead of single byte ByteBuffer#put
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-336]  Unhandled CancelledKeyException leads to a shutdown of the underlying IOReactor.
  Contributed by Thomas Dudek <mail.dudek at gmail.com>



Release 4.3-BETA2
-------------------

This is the second BETA release from the 4.3.x release branch. This release addresses performance
issues in the non-blocking connection pool implementation and also includes a number of performance
improvements in the low level NIO based transport components.

Change Log
-------------------

* [HTTPCORE-300] ContentType to provide support for custom parameters.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Non-blocking connection pool to avoid scanning the entire queue of pending connection requests
  on each connection lease / release operation (under heavy load the request queue can contain
  a significant number of pending requests, a full linear scan of which can cause massive
  performance degradation).
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Basic connection pool implementations to perform default port resolution for HTTP and HTTPS
  schemes.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Use bulk ByteBuffer#put method instead of single byte ByteBuffer#put
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-336]  Unhandled CancelledKeyException leads to a shutdown of the underlying IOReactor.
  Contributed by Thomas Dudek <mail.dudek at gmail.com>


Release 4.3-BETA1
-------------------

This is the first BETA release from the 4.3.x release branch. The main theme of the 4.3 release
series is streamlining of component configuration and deprecation of the old configuration
API based on HttpParams in favor of constructor-based dependency injection and plain objects
for configuration parameters.

This release also includes performance optimizations intended to reduce TCP packet fragmentation
when writing out HTTP messages both in blocking and non-blocking I/O modes, which should result
in up to 20% higher throughput for short entity enclosing messages.

This release also includes all fixes from the stable 4.2.x release branch.


Change Log
-------------------

* Reduced TCP packet fragmentation when writing out message content with blocking and
  non-blocking connections.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-330] Clarify InputStreamEntity length constructor argument.
  Contributed by John McCarthy <jmsignup at gmail.com>

* [HTTPCORE-323] Undocumented UnsupportedCharsetException in ContentType#getOrDefault.
  Contributed by Gary D. Gregory <ggregory at apache.org>



Release 4.2.4
-------------------

This maintenance release fixes a number of bugs found in NIO components since 4.2.3. We advise
users of HttpCore NIO of all versions to upgrade.

Change Log
-------------------

* [HTTPCORE-334] https request to a non-responsive but alive port over a non-blocking connection
  results in a busy loop in one of I/O dispatch threads.
  Contributed by Scott Stanton <snstanton at gmail.com>

* [HTTPCORE-331] BasicFuture no longer executes notification callbacks inside a synchronized block.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-319] Non-blocking SSLIOSession can fail to shut down correctly when the underlying
  connection gets terminated abnormally by the opposite endpoint in case there is a truncated or
  corrupted encrypted content in the input buffer and there is still data in the output buffer
  that needs to be flushed out (most likely to occur with POST or PUT requests).
  Contributed by Oleg Kalnichevski <olegk at apache.org>



Release 4.3-ALPHA1
-------------------

This is the first release from the 4.3.x release branch. The main focus of the 4.3 release
series is streamlining of component configuration and deprecation of the old configuration
API based on HttpParams in favor of constructor based dependency injection and plain objects
for configuration parameters.

We are kindly asking all upstream projects to review API changes and help us improve
the APIs by providing feedback and sharing ideas on dev@hc.apache.org.

This release also includes all fixes from the stable 4.2.x release branch.



Release 4.2.3
-------------------

This maintenance release fixes a number of bugs and found since 4.2.2 including
a major bug in the NIO module that can cause an infinite loop in SSL sessions under special
circumstances when the remote peer terminates the session in the middle of SSL handshake.
Please note this issue does not affect blocking I/O components used by HttpClient.

We advise users of HttpCore NIO of all versions to upgrade.

Change Log
-------------------

* [HTTPCORE-319, HTTPCORE-322] Non-blocking SSLIOSession can enter an infinite loop under
  special circumstances when the remote peer terminates the session in the middle of SSL handshake.
  Contributed by Paul Donohue <apache-jira at PaulSD.com> and
  Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-316] HeaderGroup#clone removes headers from the original object.
  Contributed by Markus Thies <markus at dr-thies.com>

* [HTTPCORE-315] AbstractNIOConnPool fails to correctly deallocate connection if it is immediately
  released from the session request callback causing a resource leak.
  Contributed by Scott Stanton <snstanton at gmail.com>

* [HTTPCORE-313] ContentType#parse now ignores empty and blank charset attributes.
  HttpEntityUtils#toString now throws checked I/O exception if it  encounters an unsupported
  charset.
  Contributed by Oleg Kalnichevski <olegk at apache.org>


Release 4.2.2
-------------------

This is a maintenance release that fixes a number of bugs and regressions found since 4.2.1
including a major bug in the NIO module causing incorrect handling of outgoing Content-Length
delimited messages larger than 2GB.

Users of HttpCore 4.2 are advised to upgrade.

Change Log
-------------------

* [HTTPCORE-312] NIO length delimited content encoder incorrectly handles messages larger than 2GB.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-310] Fixed regression in DefaultConnectionReuseStrategy causing it to incorrectly
  flag connections as non-reusable after a 204, 205 or 304 response.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-309] Fixed regression in HttpAsyncRequestExecutor causing it to handle 204, 205
  and 304 responses incorrectly by returning a message with an enclosed content body.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-306] I/O reactor TCP_NODELAY parameter now defaults to true.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPASYNC-21] request execution handler does not get closed in case of a premature HTTP
  exchange termination.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-303] ContentType made Serializable.
  Contributed by Oleg Kalnichevski <olegk at apache.org>



Release 4.2.1
-------------------

This is a maintenance release that fixes a non-critical number of bugs found since 4.2.
Users of HttpCore 4.2 are encouraged to upgrade.

Change Log
-------------------

* [HTTPCORE-299] ContentType should rely on Charset#name() instead of Charset#toString()
  for building header value.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-263] Under rare circumstances incorrectly delineated or garbled HTTP message
  can cause an IndexOutOfBoundsException in AbstractSessionInputBuffer#readLine()
  Contributed by Michael Pujos <bubbleguuum at free.fr>

* Made connection pools use FIFO algorithm instead of LIFO when leasing / releasing persistent
  connections.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-298] Fixed non-blocking SSLIOSession state can getting out of sync with the underlying
  IOSession in case the I/O session is terminated by the I/O reactor rather than by the protocol
  handler.
  Contributed by Sandeep Tamhankar <sandman at electric-cloud.com>

* Fixed NPE in StringEntity constructor thrown if ContentType#getCharset is null.
  Contributed by Oleg Kalnichevski <olegk at apache.org>


Release 4.2
-------------------

This is the first stable (GA) release of HttpCore 4.2. The most notable features included in this
release are connection pool components for blocking and non-blocking HTTP connections and new
asynchronous client and server-side protocol handlers.

New protocol handling API used in conjunction with connection pooling components is expected to
make development of asynchronous HTTP client agents and HTTP proxies easier and less error prone.

Connection pool components are based on mature code migrated from HttpClient and HttpAsyncClient
modules but have a slightly different API that makes a better use of Java standard concurrent
primitives.

Change Log
-------------------

* Fixed HttpAsyncRequestExecutor incorrect execution of message exchanges that span across multiple
  hosts (for instance, in case of a request redirect).
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* AbstractHttpClientConnection#isResponseAvailable method now catches SocketTimeoutException
  and returns false.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-296] server-side connections (both blocking and non-blocking) can now handle entity
  enclosing requests without Content-Length and Transfer-Encoding headers.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-295] [HTTPCORE-288] Provided direct access to the underlying socket of non-blocking
  HTTP connection to allow modification of socket level settings such as TCP_NODELAY, SO_KEEPALIVE,
  TrafficClass, etc.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-289] HttpAsyncService fails to invoke Cancellable#cancel() when the ongoing HTTP
  exchange is aborted by the client.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

Incompatible changes
--------------------
[Compared to release version 4.1.4]

The following methods have been deprecated for some time now and have been deleted:

org.apache.http.impl.SocketHttpServerConnection#createHttpDataReceiver(Socket, int, HttpParams)
org.apache.http.impl.SocketHttpServerConnection#createHttpDataTransmitter(Socket, int, HttpParams)
org.apache.http.protocol.HttpRequestHandlerRegistry#matchUriRequestPattern(String, String)

The following classes have been deprecated for some while now and have been deleted:

org.apache.http.nio.entity.ByteArrayNIOEntity
org.apache.http.nio.entity.FileNIOEntity
org.apache.http.nio.entity.HttpNIOEntity
org.apache.http.nio.entity.StringNIOEntity
org.apache.http.nio.protocol.NHttpClientHandlerBase
org.apache.http.nio.protocol.NHttpServiceHandlerBase

Release 4.2-BETA1
-------------------

This is the first BETA release of HttpCore 4.2. This release comes with completely redesigned
and rewritten asynchronous protocol handlers. New protocol handling API used in conjunction with
connection pooling components is expected to make development of asynchronous HTTP client agents
and HTTP proxies easier and less error prone.

Sample application shipped with the release include an example of an HTTP file server capable of
direct channel (zero copy) data transfer and an example of a non-blocking, fully streaming reverse
proxy.

This release also incorporates bug fixes from the stable 4.1.x branch and includes an updated
HttpCore tutorial.



Release 4.1.4
-------------------

This is a maintenance release that fixes a number of bugs found since 4.1.3. It is also likely
to be the last release in the 4.1.x branch.

Change Log
-------------------

* [HTTPCORE-286] Canceled I/O session can cause an IllegalStateException in BaseIOReactor#validate
  leading to an abnormal termination of the I/O reactor.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-257] Fixed incorrect results produced by DefaultConnectionReuseStrategy when handling
  response messages whose content entity has been decoded or modified by a protocol interceptor.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-283] Workaround for a bug causing termination of the I/O reactor in case of exception
  thrown by NHttpServiceHandler#requestReceived or NHttpClientHandler#responseReceived
  methods. A more comprehensive fix for the bug applied to the 4.2 branch.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-281] ResponseConnControl protocol interceptor does not correctly populate connection
  persistence control headers when sending a HTTP/1.1 response message in response to a HTTP/1.0
  request message.
  Contributed by William R. Speirs <bill.speirs at gmail.com>

* [HTTPCORE-282] The default value of the internal event mask of newly created non-blocking I/O
  is not correctly initialized, which causes the READ interest bit to get cleared in the interest
  op queuing mode unless the event mask is explicitly reset.
  Contributed by Sadeep Jayasumana <sadeep at wso2.com> and Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-268] Handle runtime exceptions thrown by SSLEngine.
  Contributed by Oleg Kalnichevski <olegk at apache.org>



Release 4.2-ALPHA2
-------------------

This is the second ALPHA release of HttpCore 4.2. This release comes with completely redesigned
and rewritten asynchronous protocol handlers. New protocol handling API used in conjunction with
connection pooling components introduced in the previous ALPHA release is expected to make
development of asynchronous HTTP client agents and HTTP proxies easier and less error prone.

Sample application shipped with the release include an example of an HTTP file server capable of
direct channel (zero copy) data transfer and an example of a non-blocking, fully streaming reverse
proxy.

We are kindly asking existing and prospective users of HttpCore to review and try out the
new protocol handlers and give us feedback while the 4.2 API is still not final. If no major flaws
are discovered the 4.2 API is expected to be frozen with the next BETA release.

Please note that new features included in this release are still considered experimental and
their API may change in the future ALPHA releases. This release also marks the end of support for
Java 1.3. As of this release HttpCore requires Java 1.5 for all its components. Several classes and
methods deprecated between versions 4.0-beta1 and 4.0 GA (more than two years ago) have been
removed in this release.

Change Log
-------------------

* [HTTPCORE-270] Fixed IllegalStateException in AbstractSessionOutputBuffer and
  AbstractSessionInputBuffer.
  Contributed by William R. Speirs <bill.speirs at gmail.com>

* [HTTPCORE-269] Connection pools incorrectly handle lease requests when the max limit for the given
  route has been exceeded and all connections in the route pool are stateful.
  Contributed by Oleg Kalnichevski <olegk at apache.org>


Release 4.2-ALPHA1
-------------------

This is the first ALPHA release of 4.2. The most notable feature included in this release is
support for connection pools of blocking and non-blocking HTTP connections. Connection pool
components are based on mature code migrated from HttpClient and HttpAsyncClient modules but have
a slightly different API that makes a better use of Java standard concurrent primitives.

Support for connection pools in HttpCore is expected to make development of client and proxy HTTP
services easier and less error prone.

Please note that new features included in this release are still considered experimental and
their API may change in the future ALPHA releases. This release also marks the end of support for
Java 1.3. As of this release HttpCore requires Java 1.5 for all its components. Several classes and
methods deprecated between versions 4.0-beta1 and 4.0 GA (more than two years ago) have been
removed in this release.

Change Log
-------------------

* [HTTPCORE-268] Handle runtime exceptions thrown by SSLEngine.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

Release 4.1.3
-------------------

This is an emergency release that fixes a severe regression in the non-blocking SSL I/O code
introduced in release 4.1.2.

* [HTTPCORE-266] SSLIOSession does not correctly terminate if the opposite end shuts down connection
  without sending a 'close notify' message causing an infinite loop in the I/O dispatch thread.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

Release 4.1.2
-------------------

This is a patch release that fixes a number of bugs found in the previous version.

Please note that several classes and methods deprecated between versions 4.0-beta1 and 4.0 GA
(more than two years ago) will also be removed in the 4.2 branch.

Users of 4.0.x versions are advised to upgrade and replace deprecated API calls following
recommendations in Javadocs.

* [HTTPCORE-261] IOSession#setSocketTimeout() method does not reset the timeout count.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-260] Non-blocking SSL I/O session can terminate prematurely causing message body
  truncation when message content is chunk coded and the connection is closed on the opposite end.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-257] Fixed incorrect results produced by DefaultConnectionReuseStrategy when handling
  response messages whose content entity has been decoded or modified by a protocol interceptor.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

Release 4.1.1
-------------------

This is a patch release that fixes a number of non-critical issues found since release 4.1.

This release marks the end of support for Java 1.3. As of release 4.2 HttpCore will require
Java 1.5 for all its components.

Please note that several classes and methods deprecated between versions 4.0-beta1 and 4.0 GA
(more than two years ago) will also be removed in the 4.2 branch.

Users of 4.0.x versions are advised to upgrade and replace deprecated API calls following
recommendations in Javadocs.

* In case of an unexpected end of stream condition (the peer closed connection prematurely)
  truncated Content-Length delimited message bodies will cause an I/O exception. Application
  can still choose to catch and ignore ConnectionClosedException in order to accept partial
  message content.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-255]: Fixed resource management in InputStreamEntity#writeTo()
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-254]: Erratic results from metrics (sebb)

* [HTTPCORE-242]: Fixed NPE in AsyncNHttpClientHandler caused by an early response to an
  entity enclosing request.
  Contributed by Oleg Kalnichevski <olegk at apache.org>


Release 4.1
-------------------

This is the first stable (GA) release of HttpCore 4.1. This release provides a compatibility mode
with JREs that have a naive (broken) implementation of SelectionKey API and also improves
compatibility with the Google Android platform. There has also been a number of performance
related improvements and bug fixes in both blocking and non-blocking components.

Change Log
-------------------

* [HTTPCORE-240]: DefaultConnectingIOReactor leaks a socket descriptor if the session request fails.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-239]: The ChunkEncoder could request for a negative buffer limit causing an
  IllegalArgumentException.
  Contributed by Asankha Perera <asankha at apache.org>

* [HTTPCORE-236]: SSLIOSession#isAppInputReady() does not check the status of the session input
  buffer.
  Contributed by Dmitry Lukyanov <dlukyanov at ukr.net>

* [HTTPCORE-233]: EntityUtils#toString() and EntityUtils#toByteArray() to return null if
  HttpEntity#getContent() is null
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-231] Fixed incorrect handling of HTTP entities by non-blocking LengthDelimitedDecoder
  when the Content-Length value is larger than Integer.MAX_VALUE.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

Release 4.1-BETA2
-------------------

This is the second BETA release of HttpCore 4.1. This is mainly a bug fix release that addresses
a number of non-critical bugs.

The most significant change in this release is deprecation of the HttpEntity#consumeContent()
method and streamlining of connection management and resource deallocation by HTTP entities.
Please refer to the Javadocs for details.

* [HTTPCORE-229] AbstractSessionInputBuffer#readLine(CharArrayBuffer) returns incorrect
  number of characters read by the method when using non-standard HTTP element charset.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Non-blocking connections can trigger #responseReady / #requestReady events by mistake
  when the underlying session is already closed.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-228] Fixed NPE in AsyncNHttpServiceHandler caused by entity enclosing requests
  if no matching request handler can be found.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-227] Fixed incorrect request / response count by non-blocking connections.
  Contributed by Harold Lee <harold at hotelling.net>

* [HTTPCORE-226] Improved compatibility of NIO components with Google Android.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* ByteArrayBuffer, CharArrayBuffer, BasicHeader, BufferedHeader, HeaderGroup, BasicRequestLine,
  BasicStatusLine made Serializable.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

Release 4.1-BETA1
-------------------

This is the first BETA release of HttpCore 4.1. This release finalizes the API introduced in the
4.1 development branch. It also fixes a number of bugs discovered since the previous release and
delivers a number of performance optimizations in the blocking HTTP transport components.
The blocking HTTP transport is expected to be 5% to 10% faster compared to previous releases.

* [HTTPCORE-222] Fixed Import-Package in the OSGi META-INF
  Contributed by Willem Jiang <willem.jiang at gmail.com>

* [HTTPCORE-177] Reduce intermediate data buffering by reading large chunks of data directly from
  the underlying socket stream. This results in improved performance of blocking read operations.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-220] IdentityDecoder fails to detect end of stream when using file channels.
  Contributed by Asankha C. Perera <asankha at apache.org>

* [HTTPCORE-218] ChunkEncoder#write method no longer returns incorrect value if
  the data to write is greater than the size of the internal buffer used by the encoder.
  Contributed by Richie Jefts <rjefts at gmail.com>

* [HTTPCORE-209] Added parameter to set SO_REUSEADDR on sockets bound to a local address.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-207] SocketHttp*Connection classes can leak sockets if the connection is half-closed
  Contributed by David Koski <david_koski at mac.com>

Release 4.1-ALPHA1
-------------------

This is the first public release from the 4.1 branch of HttpCore. This release adds a number of
new features, most notable being introduction of compatibility mode with IBM JREs and other JREs
with naive (broken) implementation of SelectionKey API.

Please note new classes and methods added in the 4.1 branch are still considered API unstable.

* Ensure that an attempt is made to close out all active sessions gracefully in case of an abnormal
  shutdown of the I/O reactor.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-201] OSGi Export-Package to specify release version
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-183] Added Thread-safe implementations of HttpParams and HttpProcessor -
  SyncBasicHttpParams and ImmutableHttpProcessor classes
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-199] ContentInputStream implements InputStream#available().
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-195] Truncated chunk-coded streams can now be tolerated by catching and discarding
  TruncatedChunkException.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-155] Compatibility mode with IBM JRE and other JREs with naive (broken) implementation
  of SelectionKey.
  Contributed by Marc Beyerle <marc.beyerle at de.ibm.com> and Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-191] Blocking HTTP connections are now capable of correctly preserving their internal
  state on SocketTimeoutExceptions, which makes it possible to continue reading from the connection
  after a socket timeout.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-190] ChunkedInputStream is now capable of correctly preserving its internal state on
  SocketTimeoutExceptions, which makes it possible to continue reading from the stream after a
  socket timeout.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

Release 4.0.1
-------------------

This is a patch release addressing a number of issues discovered since the 4.0 release. Users
of NIO module are advised to upgrade.

* [HTTPCORE-198] CONNECT request includes Host header for HTTP 1.1 connections.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-196] SSLIOSession now unwraps encrypted data more aggressively eliminating long
  pauses when receiving data over non-blocking connections.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-197] Fixed bug causing the non-blocking ChunkDecoder to report some data stream as
  truncated under special conditions.
  Contributed by Denis Rogov <denrogov at gmail.com> and Oleg Kalnichevski <olegk at apache.org>

* SSLIOSession#isAppOutputReady and SSLIOSession#isAppInputReady no longer ignore the application
  event mask causing I/O event notifications for unrequested type of events.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-193] Fixed problem with SSLIOSession incorrectly handling of end-of-stream condition.
  Contributed by Asankha C. Perera <asankha at apache.org> and Oleg Kalnichevski <olegk at apache.org>


Release 4.0
-------------------

This is the first stable (GA) release of HttpCore 4.0. This release mainly improves the
documentation and fixes a few minor bugs reported since the previous release. HttpCore
now comes with a complete tutorial presenting an in-depth coverage of the API.

HttpCore is a set of low level HTTP transport components that can be used to build custom
client and server-side HTTP services with a minimal footprint. HttpCore supports two I/O
models: blocking I/O model based on the classic Java I/O and non-blocking, event driven I/O
model based on Java NIO.  The blocking I/O model may be more appropriate for data intensive,
low latency scenarios, whereas the non-blocking model may be more appropriate for high latency
scenarios where raw data throughput is less important than the ability to handle thousands of
simultaneous HTTP connections in a resource efficient manner.

* [HTTPCORE-180] Fixed NPE in standard I/O event dispatchers when
  IOEventDispatch#disconnected fires before the session was fully initialized
  (IOEventDispatch#connected was not called).
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-175] Chunk decoders no longer accept truncated chunks as valid input.
  Contributed by Oleg Kalnichevski <olegk at apache.org>


Release 4.0 Beta 3
-------------------

The third BETA version of HttpComponents Core has been released. This is a
maintenance release, which addresses a number of issues discovered since the
previous release.

The only significant new feature is an addition of an OSGi compliant bundle
combining HttpCore and HttpCore NIO jars.

* [HTTPCORE-173] Tolerate missing closing chunk if the chunk coded content
  is terminated by the end of stream (EOF) condition.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-174] Position is incremented twice in ContentLengthInputStream#skip(long)
  Contributed by Ildar Safarov <ildar.safarov at gmail.com>

* [HTTPCORE-125] OSGi bundle containing HttpCore & HttpCore NIO jars.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* CancelledKeyException thrown in BaseIOReactor#validate() no longer causes
  a premature I/O reactor shutdown.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-172] Added #close() method to SharedInputBuffer and
  SharedOutputBuffer. The purpose of the new method is to close the buffer
  in case of normal / orderly termination of the underlying HTTP connection.
  Use #shutdown() method to force-close the buffer in case of abnormal /
  exceptional termination of the underlying connection.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-170] Fixed race condition in SharedOutputBuffer.
  Contributed by Jason Walton <Jason.Walton at alcatel-lucent.com>

* [HTTPCORE-169] Fixed bug causing connecting I/O reactors to shut down due to
  ClosedChannelException if a pending session request is cancelled before the new
  channel has been registered with the selector.
  Contributed by Anders Wallgren <anders_wallgren at alum.mit.edu>

* [HTTPCORE-167] Fixed handling the end of stream (EOF) condition in the #isStale()
  check of blocking HTTP connections.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-166] NIO reactors now maintain an audit log of fatal exceptions,
  which can be used to examine the cause and problems experienced during
  the shutdown process.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-165] Improved handling of CancelledKeyException in I/O reactors
  Contributed by Oleg Kalnichevski <olegk at apache.org>


Release 4.0 Beta 2
-------------------

The second BETA version of HttpComponents Core has been released. This release
adds a number of improvements to the NIO components, most notable being improved
asynchronous client side and server-side protocol handlers.

There has been a number of important bug fixes in HttpCore NIO module, whereas
HttpCore base module has had very few changes.

All upstream projects dependent on HttpCore NIO are strongly advised to upgrade.

* [HTTPCORE-163] Fixed AbstractMultiworkerIOReactor#execute() to correctly
  propagate the original I/O exception in case of an abnormal termination.
  Contributed by Patrick Moore <patmoore at ieee.org>

* Changed behavior of IdentityDecoder & LengthDelimitedDecoder to throw
  an IOException if data is attempted to be written beyond the length
  of a FileChannel.  Previously would write nothing.
  Contributed by Sam Berlin <sberlin at apache.org>

* Fixed bug in LengthDelimitedDecoder & IdentityDecoder that caused transfers
  to a FileChannel to overwrite arbitrary parts of the file, if data was
  buffered in SessionInputBuffer.
  Contributed by Sam Berlin <sberlin at apache.org>

* Fixed concurrency bug in the ThrottlingHttpServerHandler protocol handler.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Fixed bug in SharedInputBuffer that caused input events to be
  incorrectly suspended.
  Contributed by Asankha C. Perera <asankha at wso2.com>

* [HTTPCORE-150] Entity implementation that serializes a Java object
  Contributed by Andrea Selva <selva.andrea at gmail.com>

* [HTTPCORE-157] ChunkedOutputStream#flush() now behaves consistently with the
  specification of OutputStream#flush().
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-147] Fixed handling of requests with partially consumed content
  in ThrottlingHttpServiceHandler.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-92] ChunkEncoder splits input data larger than available space
  in the session output buffer into smaller chunks instead of expanding
  the buffer.
  Contributed by Andrea Selva <selva.andrea at gmail.com> and
  Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-149] I/O reactors now count period of inactivity since the
  time of the last read or write operation. Previously only read
  operations resulted in timeout counter reset.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-148] Improved asynchronous server and client HTTP protocol
  handler implementations.
  Contributed by Sam Berlin <sberlin at gmail.com>

* [HTTPCORE-143] Ensure the underlying channel is closed if the session
  request is canceled or times out.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-140] Fixed timeout handling in ThrottlingHttpServiceHandler.
  Contributed by Lorenzo Moretti <moznerol at hotmail.com> and
  Oleg Kalnichevski <olegk at apache.org>



Release 4.0 Beta 1
-------------------

The first BETA version of HttpComponents Core has been released. This release
can be considered a major milestone, as it marks the end of API instability
in HttpCore. As of this release the API compatibility between minor releases
in 4.x codeline will be maintained.

This release includes several major improvements such as enhanced HTTP message
parsing API and optimized parser implementations, Java 5.0 compatibility
for HttpCore NIO extensions. Upstream projects are strongly encouraged to
upgrade to the latest release.

The focus of the development efforts will be gradually shifting towards
providing better test coverage, documentation and performance optimizations.

Change Log:
----------

* [HTTPCORE-141] Session request timeout in DefaultConnectingIOReactor
  invalidates the request.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-137] DefaultHttpRequestFactory extended to support all methods
  specified in RFC 2616 (except CONNECT).
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Replaced HTTP parameter linking with a simple child/parent stack.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-134] all serialVersionUID attributes are private
  Contributed by Roland Weber <rolandw at apache.org>

* [HTTPCORE-133] Clone support for basic HTTP message elements and
  non-streaming entities.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-127] Improved API for lifecycle management of listening I/O
  reactors. One can now suspend and resume listener endpoints.
  Contributed by Asankha C. Perera <asankha at wso2.com>

* [HTTPCORE-112] DefaultConnectionReuseStrategy interprets token sequences
  Contributed by Roland Weber <rolandw at apache.org>

* [HTTPCORE-122] new interface TokenIterator and basic implementation
  Contributed by Roland Weber <rolandw at apache.org>

* HttpCore NIOSSL classes moved to HttpCore NIO.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HttpCore NIO ported to Java 1.5.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-130] Fixed over-synchronization bug leading to a thread deadlock
  condition in SSL IOEventDispatch implementations.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-37] HttpParams beans
  Contributed by Stojce Dimski <sdmiski at yahoo.it>

* [HTTPCORE-128] Simplified injection of custom NIO connection implementations.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-126] Improved HTTP message parsing API and optimized parser
  implementations.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Do not include "Connection: close" to 500 responses per default.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-121] new interface HeaderElementIterator
  Contributed by Andrea Selva <selva.andrea at gmail.com>

* [HTTPCORE-123] Fixed problem with SSLSession losing buffered data, if the
  connection has been closed by the peer.
  Contributed by Risto Reinpõld <risto.reinpold at gmail.com>



Release 4.0 Alpha 6
-------------------

The sixth ALPHA version of HttpComponents Core has been released. This release
sports an improved message parsing and formatting API in the base module and
lots of incremental improvements and bug fixes in the NIO and NIOSSL modules.
Based on the improved API, it is now possible to send and receive SIP messages
with HttpComponents Core.

HttpCore is now feature complete and we are planning to freeze the public APIs
as of next release (BETA1).

* [HTTPCORE-120] new interface HeaderIterator, available from HttpMessage
  Contributed by Roland Weber <rolandw at apache.org>

* [HTTPCORE-118] Purge closed sessions prior to opening new ones. This should
  reduce chances of running out of memory when opening and closing lots of
  NIO connections in a tight loop.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-117] Fixed bug preventing protocol handlers from closing timed out
  NIO connection when pending output (output session buffer is not empty).
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-86] Allow for optional handling of runtime exceptions
  thrown by protocol handlers to ensure the I/O dispatch thread
  remains running.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-116] moved parameter names to interfaces
  Contributed by Roland Weber <rolandw at apache.org>

* [HTTPCORE-109] Improved shutdown process of the I/O reactors in NIO modules.
  I/O reactors now attempt to terminate connections gracefully before shutting
  down the underlying socket channels.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-107] allow sending and receiving of SIP messages
  Contributed by Roland Weber <rolandw at apache.org>

* [HTTPCORE-114]: Fixed incorrect handling of the end-of-stream condition
  in SSLIOSession.
  Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-110] refactored message parsing and formatting logic
  Contributed by Roland Weber <rolandw at apache.org>

* [HTTPCORE-113] Removed unnecessary target hostname resolution from
  non-blocking client protocol handlers.
  Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-108] Close all channels registered with the I/O reactor during
  shutdown. Fixed the problem with DefaultListeningIOReactor not releasing
  socket ports until JVM is restarted.
  Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-106] Pluggable HTTP message parsers and message writers
  Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-105] Consistent class names in base and NIO modules
  Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-100] revised HttpContext hierarchy
  Contributed by Roland Weber <rolandw at apache.org>

* [HTTPCORE-103] NIO connections now attempt to consume all available session
  data while parsing HTTP messages. This can  potentially improve performance
  of non-blocking SSL connections.
  Contributed by Steffen Pingel <spingel at limewire.com>

* [HTTPCORE-102] Exceeding of maximum line length limit detected late
  Contributed by Steffen Pingel <spingel at limewire.com>

* [HTTPCORE-21] Transport and connection metrics
  Contributed by Andrea Selva <selva.andre at gmail.com> and
  Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-91] new interceptor RequestDate, renamed constants in protocol.HTTP
  Contributed by Roland Weber <rolandw at apache.org>

* [HTTPCORE-90] Version detection based on build-time properties
  Contributed by Oleg Kalnichevski <olegk at apache.org> and
  Roland Weber <rolandw at apache.org>

* [HTTPCORE-88] Added convenience methods to HttpRequestInterceptorList,
  HttpResponseInterceptorList interfaces
  Contributed by Andrea Selva <selva.andre at gmail.com>

* [HTTPCORE-89]: Fixed bug in DefaultConnectingIOReactor causing incorrect
  handling of local (immediate) connections on some platforms (affects Sun
  Solaris 2.9 / Sparc and likely other Solaris 2.x platforms)
  Contributed by Sam Berlin <sberlin at gmail.com>

Release 4.0 Alpha 5
-------------------

The fifth ALPHA version of HttpComponents Core has been released. This release
delivers a number of incremental improvements across the board in all modules
and adds several performance oriented features such as ability to transfer
data directly between a file and a socket channels.

HttpCore is almost fully feature complete now and we are likely to freeze
the public APIs as of next release (BETA1).

* [HTTPCORE-87] RuntimeExcpetions thrown in I/O worker threads are now correctly
  propagated to the I/O reactor.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-84]: Removed DateUtils/DateParseException from core.
  Contributed by Roland Weber <rolandw at apache.org>

* [HTTPCORE-63]: Made I/O select interval configurable for all default I/O
  reactor implementations.
  Contributed by Oleg Kalnichevski <olegk at apache.org> and
  Anders Wallgren <anders_wallgren at alum.mit.edu>

* [HTTPCORE-82]: Revised linking of HttpParams to reduce potential for misuse.
  Method #setDefaults() removed from the HttpParams interface.
  Contributed by Roland Weber <rolandw at apache.org>

* [HTTPCORE-81]: Maximum line length and maximum header counts parameters are now
  correctly enforced in both base and NIO modules. Fixed maximum line length check
  when parsing folded header lines.
  Contributed by Steffen Pingel <spingel at limewire.com>

* Added HTTP client handler implementation that allocates fixed size content
  buffers upon initialization and is capable of throttling the rate of I/O events
  in order to make sure those content buffers do not get overflown.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-76]: Added IOSession#shutdown() method intended to force-close
  I/O sessions (primarily needed to terminate hung SSL connections).
  Contributed by Sandeep Tamhankar <sandman at electric-cloud.com>

* [HTTPCORE-78]: Added ByteBufferAllocator interface that can be used to apply
  different ByteArray allocation strategies to session and content buffers.
  Use heap bound implementation for short-lived or variable in length (requiring
  frequent content re-allocation) buffers.
  Contributed by Steffen Pingel <spingel at limewire.com>

* [HTTPCORE-77]: The result of CharsetDecoder#decode() and CharsetEncoder#encode()
  was not checked for errors resulting in an infinite loop in
  SessionInputBuffer#readLine() and SessionOutputBuffer#writeLine()
  when malformed characters were processed.
  Contributed by Steffen Pingel <spingel at limewire.com>

* [HTTPCORE-71]: HttpParams can be copied.
  Contributed by Roland Weber <rolandw at apache.org>

* [HTTPCORE-75]: DefaultNHttpServerConnection and DefaultNHttpClientConnection
  now correctly terminate the underlying I/O session when closed.
  BufferingHttpServiceHandler now correctly applies connection keep-alive
  strategy when sending a response with no content body.
  Contributed by Steffen Pingel <spingel at limewire.com>

* [HTTPCORE-73]: Fixed bug preventing NHttpServiceHandler#responseReady and
  NHttpClientHandler#requestReady events from being fired if the HTTP message
  has no content body.
  Contributed by Steffen Pingel <spingel at limewire.com>

* [HTTPCORE-67]: Improved event listener interface
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-43]: Support for FileChannel#transferFrom() and
  FileChannel#transferTo() methods. Direct coping from and to FileChannel is
  expected to improve performance of file bound operations
  Contributed by Andrea Selva <selva.andre at gmail.com>

* [HTTPCORE-66]: Fixed handling of HTTP HEAD methods
  Contributed by Steffen Pingel <spingel at limewire.com> and
  Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-58]: NIO HTTP connections changed to throw checked
  ConnectionClosedException instead of unchecked IllegalStateException when
  an attempt is made to perform an I/O operation on a closed conection
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-56]: DefaultConnectingIOReactor no longer terminates due to a
  CancelledKeyException, if a session request gets canceled before selection
  key is fully initialized.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

Release 4.0 Alpha 4
-------------------

The forth ALPHA version of HttpComponents Core has been released.
The ALPHA4 release fixes a number of bugs and adds a number of
improvements to HttpCore base and HttpCore NIO extensions.
HttpCore NIO can be used to build HTTP services intended to handle
thousands of simultaneous connections with a small number of I/O
threads. This release also introduces NIOSSL extensions that can be
used to extend HttpCore non-blocking transport components with
ability to transparently encrypt data in transit using SSL/TLS protocol.

* [HTTPCORE-49]: DefaultConnectingIOReactor can now correctly handle
  unresolved socket addresses. It no longer terminates with the
  UnresolvedAddressException runtime exception.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-42]: Added server-side API for the expectation verification.
  Improved support for the 'expect: continue' handshake in HttpCore and
  HttpCore NIO.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-26]: Added SSL support for HttpCore NIO.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-40]: API classes no longer reference impl classes in module-main.
  Contributed by Roland Weber <rolandw at apache.org>

* [HTTPCORE-39]: Refactored HttpStatus, spun off [English]ReasonPhraseFactory.
  Contributed by Roland Weber <rolandw at apache.org>

* [HTTPCORE-32]: HttpRequestInterceptorList, HttpResponseInterceptorList
  Contributed by Roland Weber <rolandw at apache.org>

* [HTTPCORE-38]: Packages nio.impl.* are now impl.nio.*, same for examples.
  Contributed by Roland Weber <rolandw at apache.org>

* [HTTPCORE-27]: I/O reactors can now accept a thread factory as an optional
  parameter.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-36]: Fixed #setHandlers() method and matching of request URIs
  with a query part in HttpRequestHandlerRegistry
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-28]: DefaultConnectingIOReactor now maintains a queue of connect
  requests and registers new sessions with the selector on the I/O thread.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-29] DefaultConnectingIOReactor changed to ensure IOExceptions
  are correctly propagated to the caller, if an exception is thrown while
  initializing a newly connected socket.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-24] Fixed bug in non-blocking connection implementations, which
  prevented the session buffer from being correctly flushed when the content
  coding process has been completed.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-23] Fixed threading bug in DefaultConnectingIOReactor.
  Contributed by Asankha C. Perera <asankha at wso2.com>

Release 4.0 Alpha 3
-------------------

The third ALPHA version of HttpCore has been released. The ALPHA3 release
includes a number of API optimizations and improvements and introduces a set
of NIO extensions to the HttpCore API. NIO extensions can be used to build
HTTP services intended to handle thousands of simultaneous connections with
a small number of I/O threads.

* [HTTPCORE-15] Provided a interafce to access IP address of the local and
  remote end points.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [ HTTPCORE-14] Scheme, SocketFactory and SecureSocketFactory moved to
  HttpClient. Decoupled HttpHost and Scheme.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-13] Refactored HttpProcessor interface and related impl classes
  Contributed by Roland Weber <rolandw at apache.org>

* [HTTPCORE-11] Client connection interface no longer defines a specific
  method to open a connection. HTTP connections can now represent any
  abstract I/O transport such as those based on NIO API.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-10] Non-blocking (async) client side I/O transport based on NIO.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-9] Non-blocking (async) server-side I/O transport based on NIO.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-7] ConnectionReuseStrategy interface changed to allow access
  to the HTTP execution context.
  Contributed by Roland Weber <rolandw at apache.org>

* [HTTPCORE-6] Header implementation allowing for performance short-cuts
  when serializing and deserializing HTTP headers.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-5] Header, HeaderElement, NameValuePair, RequestLine, StatusLine,
  HttpVersion changed to interfaces. API no longer contains any parsing and
  formatting code and does not imply any specific physical representation of
  HTTP messages and their elements.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

Release 4.0 Alpha 2
-------------------
This is a maintenance release that mostly fixes minor problems found since the
previous release. The upstream projects are strongly encouraged use this
release as a dependency while HttpCore undergoes another round of reviews
and optimization in the SVN trunk

Change Log:
---------
* [HTTPCORE-4] optional header and line length limits to contain OOME risks
  Contributed by Oleg Kalnichevski <olegk at apache.org>

Release 4.0 Alpha 1
-------------------
This release represents a complete redesign of the Jakarta Commons HttpClient
3.x API and a significant rewrite of the core HTTP components derived from
HttpClient 3.0 code base.

These components will form the foundation of the future releases of Jakarta
HttpClient and can also be used separately to build custom client- and
server-side HTTP services.
