CONTRIBUTIONS & CHANGE HISTORY
==============================

21-09-2018  - v4.4.2
             * Fix for #163 - default to using IPv4

23-08-2018  - v4.4.1
             * Fixes to TLS socket handling (PR#163)
             * Fix ipv6 address family handling (PR#155)
             * Don't send messages to closed/inactive connections (PR#152)

28-01-2017 - v4.4
             * Fixes to SOCKS over SSL processing
             * Added stream_full_chunks option
             * Merged pull requests 145, 151

07-06-2016 - v4.3
             * Adopted erlang.mk for compiling. I find it easier to understand
               how 'make' behaves compared to rebar. This repo can still be built
               using rebar for those who prefer it
             * Removed references to lager. Introduced configurable logging function
             * Fixed an issue where the calling process was getting an extra
               spurious timeout message when the request was timing out

19-04-2016 - v4.2.4
             * Fixed travis-ci build as it was failing in running tests. 
               No code changes to ibrowse

19-04-2016 - v4.2.3
             * Fix for https://github.com/cmullaparthi/ibrowse/issues/143
             * Fix for https://github.com/cmullaparthi/ibrowse/issues/142
             * Fix for https://github.com/cmullaparthi/ibrowse/issues/139
             * Fixed behaviour of option preserve_status_line

25-11-2015 - v4.2.2
             * Fix to ibrowse.app.src to enable publishing using Hex

25-11-2015 - v4.2.1
             * Merged pull request https://github.com/cmullaparthi/ibrowse/pull/132
             * Merged pull request https://github.com/cmullaparthi/ibrowse/pull/137

28-09-2015 - v4.2
             * Merged long pending improvements to pipelining
               https://github.com/cmullaparthi/ibrowse/pull/123
             * Merged pull request https://github.com/cmullaparthi/ibrowse/pull/131

03-08-2015 - v4.1.2
             * R18 compatibility fix
               https://github.com/cmullaparthi/ibrowse/issues/129
             * Add max_attempts option
               https://github.com/cmullaparthi/ibrowse/pull/125
             * Fix for https://github.com/cmullaparthi/ibrowse/pull/120
             * Enhanced SOCKS5 support
               https://github.com/cmullaparthi/ibrowse/pull/117

10-07-2014 - v4.1.1
             * Added support for accepting binaries as header names
             * Fix for https://github.com/cmullaparthi/ibrowse/issues/110
             * Fix for https://github.com/cmullaparthi/ibrowse/issues/111
             * Fix for https://github.com/cmullaparthi/ibrowse/issues/112

18-04-2013 - v4.1.0
             * Fix for https://github.com/cmullaparthi/ibrowse/issues/101
             * Support for https://github.com/cmullaparthi/ibrowse/issues/90
             * Fix for https://github.com/cmullaparthi/ibrowse/issues/86
             * Merged various contributions. Please see commit history for details
             * Introduced the return_raw_request option

09-04-2013 - v4.0.2
             * Tagging master with new version to cover changes
               contributed over the past few months via various pull requests

07-08-2012 - v4.0.1
             * Fix issue 67 properly.

03-08-2012 - v4.0.0
             * Fixed a regression in handling HEAD.
               https://github.com/cmullaparthi/ibrowse/issues/67

             * Fixed a bug in handling SSL requests through a proxy

06-04-2012 - v3.0.4
             * Fix for the following issue
               https://github.com/cmullaparthi/ibrowse/issues/67

13-03-2012 - v3.0.3
             * Fixes the following issues
               https://github.com/cmullaparthi/ibrowse/issues/64
               https://github.com/cmullaparthi/ibrowse/issues/63
               https://github.com/cmullaparthi/ibrowse/issues/62

31-01-2012 - v3.0.2
             * Fixed bug when stopping ibrowse. Not service affecting.

23-01-2012 - v3.0.1
             * Fixed bug highlighted by Dialyzer

23-01-2012 - v3.0.0
             * Change to the way pipelining works.
             * Fixed various issues reported

13-04-2011 - v2.2.0
             * Filipe David Manana added IPv6 support. This is a mjor new
               feature, Thank you Filipe!
             * Joseph Wayne Norton contributed tweaks to .gitignore

09-02-2011 - v2.1.4
             * Fixed a bug reported by Ryan Zezeski with the
               save_response_to_file option.
               https://github.com/cmullaparthi/ibrowse/issues#issue/33

16-01-2011 - v2.1.3
             * Fixed issues with streaming and chunked responses when using
               the 'caller controls socket' feature. See following links for
               details. Contributed by Filipe David Manana.
               https://github.com/cmullaparthi/ibrowse/pull/24
               https://github.com/cmullaparthi/ibrowse/pull/25
               https://github.com/cmullaparthi/ibrowse/pull/27
               https://github.com/cmullaparthi/ibrowse/pull/28
               https://github.com/cmullaparthi/ibrowse/pull/29

             * Fix for issue 32 reported by fholzhauser
               https://github.com/cmullaparthi/ibrowse/issues#issue/32

             * Fixed some dialyzer warnings. Thanks to Kostis for reporting
               them.

20-12-2010 - v2.1.2
             * Pipelining wasn't working when used in conjunction with the
               {stream_to, {self(), once}} option. Bug report by
               Filipe David Manana.

10-12-2010 - v2.1.1
             * Fix for https://github.com/cmullaparthi/ibrowse/issues/issue/20
               by Filipe David Manana

             * Fix for https://github.com/cmullaparthi/ibrowse/issues/issue/21
               by Filipe David Manana

             * Fix for https://github.com/cmullaparthi/ibrowse/issues/issue/23
               by Filipe David Manana

             * Fix for bugs when using SSL by Jo?o Lopes

25-10-2010 - v2.1.0
             * Fixed build on OpenSolaris. Bug report and patch from
               tholschuh.
               http://github.com/cmullaparthi/ibrowse/issues/issue/10

             * Fixed behaviour of inactivity_timeout option. Reported by
               Jo?o Lopes.
               http://github.com/cmullaparthi/ibrowse/issues/issue/11

             * Prevent atom table pollution when bogus URLs are input to
               ibrowse. Bug report by Jo?o Lopes.
               http://github.com/cmullaparthi/ibrowse/issues/issue/13

             * Automatically do Chunked-Transfer encoding of request body
               when the body is generated by a fun. Patch provided by
               Filipe David Manana.
               http://github.com/cmullaparthi/ibrowse/issues/issue/14

             * Depending on input options, ibrowse sometimes included multiple
               Content-Length headers. Bug reported by Paul J. Davis
               http://github.com/cmullaparthi/ibrowse/issues/issue/15

             * Deal with webservers which do not provide a Reason-Phrase on the
               response Status-Line. Patch provided by Jeroen Koops.
               http://github.com/cmullaparthi/ibrowse/issues/issue/16

             * Fixed http://github.com/cmullaparthi/ibrowse/issues/issue/17
               This was reported by Filipe David Manana.

             * Fixed http://github.com/cmullaparthi/ibrowse/issues/issue/19
               This was reported by Dan Kelley and Filipe David Manana.

             * Added ibrowse:stream_close/1 to close the connection
               associated with a certain response stream. Patch provided by
               Jo?o Lopes.

             * Prevent port number being included in the Host header when port
               443 is intended. Bug reported by Andrew Tunnell-Jones

24-09-2010 - v2.0.1
             * Removed a spurious io:format statement

22-09-2010 - v2.0.0.

           * Added option preserve_chunked_encoding. This allows the
             caller to get the raw HTTP response when the
             Transfer-Encoding is Chunked. This feature was requested
             by Benoit Chesneau who wanted to write a HTTP proxy using
             ibrowse.

           * Fixed bug with the {stream_to, {Pid, once}} option. Bug
             report and lot of help from Filipe David Manana. Thank
             you Filipe.

           * The {error, conn_failed} and {error, send_failed} return
             values are now of the form {error, {conn_failed, Err}}
             and {error, {send_failed, Err}}. This is so that the
             specific socket error can be returned to the caller. I
             think it looks a bit ugly, but that is the best
             compromise I could come up with.

           * Added application configuration parameters
             default_max_sessions and default_max_pipeline_size. These
             were previously hard coded to 10.

           * Versioning of ibrowse now follows the Semantic Versioning
             principles.  See http://semver.org. Thanks to Anthony
             Molinaro for nudging me in this direction.

           * The connect_timeout option now only applies to the
             connection setup phase. In previous versions, the time
             taken to setup the connection was deducted from the
             specified timeout value for the request.

17-07-2010 - * Merged change made by Filipe David Manana to use the base64
               module for encoding/decoding.

11-06-2010 - * Removed use of deprecated concat_binary. Patch supplied by
               Steve Vinoski

10-06-2010 - * Fixed bug in https requests not going via the proxy

12-05-2010 - * Added support for the CONNECT method to tunnel HTTPS through
               a proxy. When a https URL is requested through a proxy,
               ibrowse will automatically use the CONNECT method to first
               setup a tunnel through the proxy. Once this succeeds, the
               actual request is dispatched. Successfully tested with the
               new SSL implementation in R13B-03
             * Added SSL support for direct connections.
               See ibrowse:spawn_worker_process/1 and
               ibrowse:spawn_link_worker_process/1
             * Added option to return raw status line and raw unparsed headers

23-04-2010 - * Fixes to URL parsing by Karol Skocik

08-11-2009 - * Added option headers_as_is

04-10-2009 - * Patch from Kostis Sagonas to cleanup some code and suppress
               dialyzer warnings

24-09-2009 - * When a filename was supplied with the 'save_response_to_file'
               option, the option was being ignored. Bug report from
               Adam Kocoloski

05-09-2009 - * Introduced option to allow caller to set socket options.

29-07-2009 - * The ETS table created for load balancing of requests was not
               being deleted which led to the node not being able to create
               any more ETS tables if queries were made to many number of
               webservers. ibrowse now deletes the ETS table it creates once the
               last connection to a webserver is dropped.
               Reported by Seth Falcon.
             * Spurious data being returned at end of body in certain cases of
               chunked encoded responses from the server.
               Reported by Chris Newcombe.

03-07-2009 - Added option {stream_to, {Pid, once}} which allows the caller
             to control when it wants to receive more data. If this option
             is used, the call ibrowse:stream_next(Req_id) should be used
             to get more data.
   *  Patch submitted by Steve Vinoski to remove compiler warnings
             about the use of obsolete guards

29-06-2009 - * Fixed following issues reported by Oscar Hellstr?m
       *  Use {active, once} instead of {active, true}
       *  Fix 'dodgy' timeout handling
       *  Use binaries internally instead of lists to reduce memory
                 consumption on 64 bit platforms. The default response format
                 is still 'list' to maintain backwards compatibility. Use the
                 option {response_format, binary} to get responses as binaries.
             * Fixed chunking bug (reported by Adam Kocoloski)
             * Added new option {inactivity_timeout, Milliseconds} to timeout
               requests if no data is received on the link for the specified
               interval. Useful when responses are large and links are flaky.
             * Added ibrowse:all_trace_off/0 to turn off all tracing
             * Change to the way responses to asynchronous requests are
               returned. The following messages have been removed.
                * {ibrowse_async_response, Req_id, {chunk_start, Chunk_size}}
                 * {ibrowse_async_response, Req_id, chunk_end}
             * Fixed Makefiles as part of Debian packaging
               (thanks to Thomas Lindgren)
             * Moved repository from Sourceforge to Github

11-06-2009 - * Added option to control size of streamed chunks. Also added
               option for the client to receive responses in binary format.

21-05-2008 - * Fixed bug in reading some options from the ibrowse.conf file.
               Reported by Erik Reitsma on the erlyaws mailing list
             * Fixed bug when cleaning up closing connections

27-03-2008 - * Major rewrite of the load balancing feature. Additional module,
               ibrowse_lb.erl, introduced to achieve this.
             * Can now get a handle to a connection process which is not part of
               the load balancing pool. Useful when an application is making
               requests to a webserver which are time consuming (such as
               uploading a large file). Such requests can be put on a separate
               connection, and all other smaller/quicker requests can use the
               load balancing pool. See ibrowse:spawn_worker_process/2 and
               ibrowse:spawn_link_worker_process/2
             * Ram Krishnan sent a patch to enable a client to send a lot of
               data in a request by providing a fun which is invoked by the
               connection handling process. This fun can fetch the data from
               any where. This is useful when trying to upload a large file
               to a webserver.
             * Use the TCP_NODELAY option on every socket by default
             * Rudimentary support for load testing of ibrowse. Undocumented,
               but see ibrowse_test:load_test/3. Use the source, Luke!
             * New function ibrowse:show_dest_status/2 to view state of
               connections/pipelines to a web server

20-02-2008 - Ram Krishnan sent another patch for another hidden bug in the
             save_response_to_file feature.

07-02-2008 - Ram Krishnan (kriyative _at_ gmail dot com) sent a simple patch to
             enable specifying the filename in the save_response_to_file option.
             When testing the patch, I realised that my original implementation
             of this feature was quite flaky and a lot of corner cases were
             not covered.  Fixed all of them. Thanks Ram!

17-10-2007 - Matthew Reilly (matthew dot reilly _at_ sipphone dot com)
             sent a bug report and a fix. If the chunk trailer spans two TCP
             packets, then ibrowse fails to recognise that the chunked transfer
             has ended.

29-08-2007 - Bug report by Peter Kristensen(ptx _at_ daimi dot au dot dk).
             ibrowse crashes when the webserver returns just the Status line
             and nothing else.

28-06-2007 - Added host_header option to enable connection to secure sites
             via stunnel

20-04-2007 - Geoff Cant sent a patch to remove URL encoding for digits in
             ibrowse_lib:url_encode/1.
             ibrowse had a dependency on the inets application because the
             ibrowse_http_client.erl invoked httpd_util:encode_base64/1. This
             dependency is now removed and the encode_base64/1 has been
             implemented in ibrowse_lib.erl

06-03-2007 -  Eric Merritt sent a patch to support WebDAV requests.

12-01-2007 -  Derek Upham sent in a bug fix. The reset_state function was not
              behaving correctly when the transfer encoding was not chunked.

13-11-2006 -  Youn?s Hafri reported a bug where ibrowse was not returning the
                temporary filename when the server was closing the connection
                after sending the data (as in HTTP/1.0).
              Released ibrowse under the BSD license

12-10-2006 -  Chris Newcombe reported bug in dealing with requests where no
              body is expected in the response. The first request would succeed
              and the next request would hang.

24-May-2006 - Sean Hinde reported a bug. Async responses with pipelining was
              returning the wrong result.

08-Dec-2005 - Richard Cameron (camster@citeulike.org). Patch to ibrowse to
              prevent port number being included in the Host header when port
              80 is intended.

22-Nov-2005 - Added ability to generate requests using the Chunked
              Transfer-Encoding.

08-May-2005 - Youn?s Hafri made a CRUX LINUX port of ibrowse.
              http://yhafri.club.fr/crux/index.html
