Release 4.4.13
-------------------

This is a maintenance release that corrects a number of defects discovered since release 4.4.12.

Changelog
-------------------

* HTTPCORE-612: DefaultConnectionReuseStrategy incorrectly used int to represent Content-Length value
  instead of long.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPASYNC-152: Non-blocking connection pools to automatically close all newly created sessions when
  being shut down.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPASYNC-152: Better session state representation in SessionRequestImpl.
  Contributed by Anurag Agarwal <anurag.agarwal561994 at gmail.com>

* HTTPCORE-609: Non-blocking session requests to immediately cancel the associated key if already
  marked as completed.
  Contributed by Anurag Agarwal <anurag.agarwal561994 at gmail.com>

* HTTPCORE-607: HttpAsyncService incorrectly attempts to submit a response over idle connection in case
  of a timeout (no prior request).
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Bug fix: SSLEngine#closeOutbound() called prematurely in SSLIOSession#close().
  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
  (back-ported from master).
  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>

* 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>

* HTTPCORE-596: Connection pools to reduce socket timeout to 1 second when closing managed connections
  Contributed by Oleg Kalnichevski <olegk at apache.org>


Release 4.4.12
-------------------

This is a maintenance release that corrects a number of defects discovered since release 4.4.11.

Changelog
-------------------
* HTTPASYNC-152: Minimize possibility of a race condition when I/O reactor session request gets
  cancelled or times out immediately after its creation.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

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

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

* Rethrow RuntimeExceptions thrown by SSLSetupHandler#initalize as SSLException
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-578: Incorrect serialization of HeaderGroup.
  Contributed by Gary Gregory <ggregory at apache.org>

* HTTPCORE-370, HTTPCORE-574: Discard non-blocking session request immediately upon timeout.
  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 doesn't always enforce the maximum number of bytes to transfer.
  Contributed by Julien Coloos <julien.coloos at gmail.com>

* HTTPCORE-567: Fixed race condition that may cause a connection leak when the connection lease
  request is cancelled from another thread.
  Contributed by Oleg Kalnichevski <olegk at apache.org>



Release 4.4.11
-------------------

This is a maintenance release that corrects a number of defects in non-blocking SSL session code
that caused compatibility issues with TLSv1.3 protocol implementation shipped with Java 11.


Changelog
-------------------

* HTTPCORE-564: fixed deadlock in IOSessionImpl caused by concurrent session closure and i/o reactor
  shutdown.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Bug fix: asynchronous HTTP connections must not suspend output if there is buffered output data.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Bug fix: SSL I/O session to keep input interest if there is buffered application data.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Bug fix: keep SSL i/o session in 'CLOSING' state as long as there is buffered application data.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Bug fix: corrected abnormal termination of pipelined request sequence.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Bug fix: non-blocking SSL session incorrectly stops decrypting incoming data if unwrap operation
  results in NOT_HANDSHAKING status (back-ported from master).
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Bug fix: corrected handling of NEED_WRAP handshake status during graceful SSL session termination
  (back-ported from master).
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Bug fix: corrected handling of graceful SSL session termination initiated by the opposite endpoint
  (back-ported from master).
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Refactor duplicate messages into a new 0-arg constructor for
  org.apache.http.ConnectionClosedException.
  Contributed by Gary Gregory <ggregory at apache.org>

* Fix typos in exception messages.
  Contributed by Gary Gregory <ggregory at apache.org>
  
* HTTPCORE-550: When a ParseException is caught and rethrown as an IOException in
  org.apache.http.impl.nio.codecs.ChunkDecoder.processFooters(), the IOException does not chain the
  original ParseException.
  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>

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

* Corrected Automatic-Module-Name entries for HttpCore NIO and HttpCore AB
  Contributed by Oleg Kalnichevski <olegk at apache.org>


Release 4.4.10
-------------------

This is a maintenance release that adds Automatic-Module-Name to the manifest for compatibility
with Java 9 Platform Module System and fixes a number of issues discovered since 4.4.9


Changelog
-------------------

* HTTPCORE-510: Avoid an ArithmeticException in AbstractMultiworkerIOReactor by failing earlier by checking
  ioThreadCount in IOReactorConfig constructor.
  Contributed by Gary Gregory <ggregory 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-508: Reject response messages with status code lesser than 100 as invalid
  Contributed by Oleg Kalnichevski <olegk 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-513] Better handling of very large content by ExpandableBuffer
  Contributed by imoldovan-intacct <imoldovan at intacct.com>

* 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-515: Add convenience API org.apache.http.impl.nio.DefaultHttpServerIODispatch.create(T, SSLContext,
  ConnectionConfig, HttpRequestFactory).
  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-519: Failing tests on Fedora 28 due to weak encryption algorithms in test keystore.
  Contributed by Gary Gregory <ggregory at apache.org> and Michael Simacek <msimacek at redhat dot com>

* HTTPCLIENT-1914: negative value of max connection per route to restore the default max value (by removing
  the underlying entry from the route map).
  Contributed by Corneliu Chitic <corneliu.chitic at computaris.com>

* HTTPCORE-527: Add remote address when throwing a ConnectException.
  Contributed by Jason Tedor <jason at tedor dot me>

* HTTPCORE-523: Improve HeaderValueParser API doc
  Contributed by Julian Reschke <julian.reschke at gmx.de>

* Add Automatic-Module-Name in manifest so Java9 modular applications can depend on this library
  Contributed by Varun Nandi <varunkn at amazon.com>

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


Release 4.4.9
-------------------

This is a maintenance release that fixes a number of issues discovered since 4.4.8 and adds a few low-level methods.

Changelog
-------------------

* HTTPCORE-494: Add image constants to ContentType.
  Contributed by Gary Gregory <ggregory at apache.org>
  
* HTTPCORE-496: Add API org.apache.http.protocol.UriPatternMatcher.entrySet().
  Contributed by Gary Gregory <ggregory at apache.org>
  
* HTTPCORE-497: Add API org.apache.http.nio.protocol.UriHttpAsyncRequestHandlerMapper.getUriPatternMatcher().
  Contributed by Gary Gregory <ggregory at apache.org>

* HTTPCORE-499: Make interface Header extend NameValuePair.
  Contributed by Gary Gregory <ggregory at apache.org>
  
* HTTPCORE-502: Add APIs to DefaultHttpServerIODispatch to get its connection factory and handler.
  Contributed by Gary Gregory <ggregory at apache.org>

* HTTPCORE-503: Add APIs to DefaultHttpClientIODispatch to get its connection factory and handler.
  Contributed by Gary Gregory <ggregory at apache.org>

* HTTPCORE-504: Update DefaultHttpClientIODispatch constructor to type for subclasses of DefaultNHttpClientConnection (like DefaultHttpServerIODispatch.)
  Contributed by Gary Gregory <ggregory at apache.org>

* HTTPCORE-505: Make org.apache.http.nio.protocol.HttpAsyncService instance variables available through getters.
  Contributed by Gary Gregory <ggregory at apache.org>

* HTTPCORE-506: Add generics to DefaultHttpClientIODispatch to specify the NHttpClientEventHandler implementation type.
  Contributed by Gary Gregory <ggregory at apache.org>

* HTTPCORE-507: Add generics to DefaultHttpServerIODispatch to specify the NHttpServerEventHandler implementation type.
  Contributed by Gary Gregory <ggregory at apache.org>


Release 4.4.8
-------------------

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

Changelog
-------------------

* HTTPCORE-492: Make org.apache.http.nio.protocol.ErrorResponseProducer public.
  Contributed by Gary Gregory <ggregory at apache.org>

* HTTPCORE-493: Make org.apache.http.nio.protocol.HttpAsyncService.responseFactory available to subclasses.
  Contributed by Gary Gregory <ggregory at apache.org>

* HTTPCORE-491: Make BasicAsyncRequest|ResponseConsumer more paranoid
  Contributed by Michael Heemskerk <mheemskerk@atlassian.com>

* HTTPCORE-490: session requests do not get cancelled correctly if the associated HTTP response futures get cancelled
  Contributed by Oleg Kalnichevski <olegk at apache.org>


Release 4.4.7
-------------------

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

Changelog
-------------------

* HTTPCORE-487: org.apache.http.nio.reactor.ssl.SSLIOSession and SSLNHttpClientConnectionFactory
  do not always use the HTTP host setting.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

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

* HTTPCORE-483: back-ported SSL session termination bug fix from 5.x.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* Fixed a race condition in message exchange state synchronization during an expect-continue handshake.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-481: async request executor to treat non-error (status >= 200 and status < 400)
  out of sequence responses as valid.
  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>

* HTTPCORE-463: Fixed incorrect use of connect timeout setting in AbstractNIOConnPool.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-455: fatal Error in an individual worker thread does not cause proper I/O reactor shutdown.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-487: org.apache.http.nio.reactor.ssl.SSLIOSession and SSLNHttpClientConnectionFactory
  do not always use the HTTP host setting.
  Contributed by Gary Gregory <ggregory at apache.org> and 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>

* HTTPCORE-456: BasicFuture fails to honor Future interface contract by not throwing
  CancellationException when cancelled.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-455: fatal Error in an individual worker thread does not cause proper I/O reactor
  shutdown.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCORE-460: Add factory methods to DefaultHttpClientIODispatch to handle a null SSLContext.
  Contributed by Gary Gregory <ggregory at apache.org>

* HTTPCORE-461: Add factory methods to DefaultHttpServerIODispatch to handle a null SSLContext.
  Contributed by Gary Gregory <ggregory at apache.org>

* HTTPCORE-462: Deprecate SSLContextBuilder.useProtocol(String) in favor a new method setProtocol(String).
  Contributed by Gary Gregory <ggregory at apache.org>

* HTTPCORE-464: org.apache.http.nio.protocol.HttpAsyncService does not always log exceptions.
  Contributed by Gary Gregory <ggregory at apache.org>

* HTTPCORE-465: Update example NHttpReverseProxy to support SSL to origin servers which use self-signed certificates.
  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>

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

* HTTPCORE-470: Add a org.apache.http.nio.protocol.NullRequestHandler singleton.
  Contributed by Gary Gregory <ggregory at apache.org>

* HTTPCORE-446: fixed deadlock in AbstractConnPool shutdown code.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPASYNC-116: Remove cancelled lease requests from the request queue when validating
  pending requests.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* HTTPCLIENT-1808: Fixing potential overflow for connection TTL
  Contributed by Andrew Shore <shorea at amazon.com>

* HTTPCORE-442: Non-blocking SSL sessions fail to decrypt buffered input data in some cases
  if closed by the opposite endpoint
  Contributed by Oleg Kalnichevski <olegk at apache.org>


Release 4.4.6
-------------------

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

Changelog
-------------------

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

* [HTTPCORE-433] moved expensive connection validation code outside the pool lock.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-435] ConnectionConfig#copy() does not copy every field.
  Contributed by Clement Pellerin <clement_pellerin at ibi.com>

* [HTTPCORE-434] Handling of HEAD responses without payload headers.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-431] correct character encoding default for application/json.
  Contributed by Oleg Kalnichevski <olegk at apache.org>

* [HTTPCORE-428] SSLIOSession#close to handle CancelledKeyException.
  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-423] Fixed MIME type validation in ContentType#create(String) method.
  Contributed by Oleg Kalnichevski <olegk at apache.org>



Release 4.4.5
-------------------

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

Please note the following annotations originally based on CC-BY licensed source have been removed 
in this release:

org.apache.http.annotation.GuardedBy
org.apache.http.annotation.Immutable
org.apache.http.annotation.NotThreadSafe
org.apache.http.annotation.ThreadSafe


Changelog
-------------------

* [HTTPCLIENT-1743] remove dependency on CC-BY licensed source
  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>
    
* Support 64-bit chunk headers
  Contributed by Dmitry Potapov <dpotapov at yandex-team.ru>
  
* Fixed race condition in request initialization code and #endOfInput method in async client 
  protocol handlers
  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>
    
* PATCH method support
  Contributed by Ömer Özkan <omer at ozkan.info>
    


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.


Changelog
-------------------

* [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.


Changelog
-------------------

* 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.


Changelog
-------------------

* 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.


Changelog
-------------------

* [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.


Changelog
-------------------

* 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.


Changelog
-------------------

* [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.

Changelog
-------------------

* [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.

Changelog
-------------------

* [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.


Changelog
-------------------

* [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.


Changelog
-------------------

* [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.

Changelog
-------------------

* [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.


Changelog
-------------------

* 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.

Changelog
-------------------

* [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.

Changelog
-------------------

* [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.

Changelog
-------------------

* [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.

Changelog
-------------------

* [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.

Changelog
-------------------

* 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.

Changelog
-------------------

* [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.

Changelog
-------------------

* [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.

Changelog
-------------------

* [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.

Changelog
-------------------

* [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.

Changelog:
----------

* [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

Changelog:
---------
* [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.
