CONTRIBUTIONS & CHANGE HISTORY
==============================
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
