What’s New — cpp-netlib v0.13.0

# What’s New

## `cpp-netlib` 0.13

- Lots of little fixes.
- Support for per-request SNI hostnames
- Fixes to chunk and content-length encoding.
- Changed default connection buffer size to 4K.
- Support for IPv6 and HTTPS.
- Example of large upload handling with the HTTP server.
- Depend on Boost.Asio again instead of standalone Asio.
- Added Visual Studio 2015 support.
- Update minimum Boost to 1.58. Always use shared libs from Boost.

## `cpp-netlib` 0.12

- Added a code of conduct.
- Add TLS SNI hostname support in the HTTP Client options.
- Changes based on Coverity reports.
- Replace std::bind with lambdas.
- Use std::shared_ptr instead of boost::shared_ptr.
- Use standalone Asio instead of Boost.Asio.
- No Boost library (shared or static) dependencies.
- Use doxygen for documentation, integrated with Breathe to Sphinx.
- Require C++11 for builds, removes support for non-C++11 compilers.
- Update documentation for hello_world_server
- Use googletest for tests
- Fix XCode-generated debug binaries caused by URI parser complexity
- Remove synchronous client implementation.
- Remove support for connection keepalive (only supported in synchronous client).
- Disable SSLv3 by default.
- Use sanitisers in continuous integration (address and thread sanitiser).
- Update minimum Boost to 1.57. Always use shared libs from Boost.

## `cpp-netlib` 0.11

### v0.11.2

- Support a source_port setting for connections made by the client per-request.
- Allow using cpp-netlib without OpenSSL.
- Fix build breakage for Visual Studio 2015.
- Add more options for HTTP client use of SSL/TLS options/ciphers.
- Made client_get_timeout_test less flaky.
- Fixes to URI encoding issues with multibyte strings.
- Make cpp-netlib not crash on unstable networks.
- Allow parsing empty query parameters (#499).
- CMake build changes to simplify dependencies on cppnetlib-client-connections.
- Handle EOF correctly (#496).
- Fix fileserver example to chunk data correctly.
- Copy hostname to avoid dangling reference to a temporary request object. (#482)
- Catch exceptions in parse_headers to avoid propagating issues in parsing upwards.
- Fix some GCC warnings on signed/unsigned comparison.
- Support environment variable-based peer verification (via OpenSSL).
- Support IPv6 connections.
- Support certificate-based verification, and option to always verify hosts.

### v0.11.1

- Add support for request timeouts.
- Build configuration fixes.
- Support for Travis CI in-project config.
- Make the response parser more flexible to support older/ad-hoc servers that don’t have standard format responses.
- Fix some instability in the client destructor.
- MSVC 2010 specific fixes.

### v0.11.0

- Fix thread leak in DNS resolution failure (#245)
- Remove unsupported client_fwd.hpp header (#277)
- Remove support for header-only usage (#129) – this means that the BOOST_NETWORK_NO_LIB option is no longer actually supported.
- Deprecate Synchronous Client implementations (#279)
- Support streaming body chunks for PUT/POST client requests (#27)
- Fix non-case-sensitive header parsing for some client tags (#313)
- Remove unsupported Jamfiles from the whole project (#316)
- Add `make install` for Linux and OS X (#285)
- Fix incorrect Body processing (#69)
- Support chunked transfer encoding from HTTP responses (#86)
- Make OS X Clang builds use C++11 and libc++.
- Update Boost requirement to 1.54.0.
- Experimental Base64 encoding/decoding library (#287)
- Known test failure: OS X Xcode Clang 5.0 + Boost 1.54.0 + libc++ don’t play well with Boost.Serialization issues, mitigate test breakage but `cpp-netlib-utils_base64_test` still fails in this platform. (#287)
- Provide a client option to always validate peers for HTTPS requests made by the client. (#349)
- Back-port fix for #163 for improved URI parsing.
- Added support for client-side certificates and private keys (#361).

## `cpp-netlib` 0.10

### v0.10.1

- Documentation updates (#182, #265, #194, #233, #255)
- Fix issue with async server inadvertently stopping from listening when accepting a connection fails. (#172)
- Allow overriding and ultimately removing defaulted headers from HTTP requests. (#263)
- Add -Wall to the base rule for GCC builds. (#264)
- Make the server implementation throw on startup errors. (#166)

### v0.10.0

- Added support for more HTTP status codes (206, 408, 412, 416, 507).
- Refactored the parser for chunked encoding.
- Fixed parsing chunked encoding if the response body has `<chunk>CLRF<hex>CLRF<data>`.
- Added librt dependency on Linux.
- Check the callback in the asynchronous client before calling it.
- Fixed issues #110, #168, #213.

## `cpp-netlib` 0.9

### v0.9.5

- Removed dependency on Boost.Parameter from HTTP client and server.
- Fixed for Clang error on Twitter example.
- Added source port to the request (HTTP server).
- Updated CMake config for MSVC 2010/2012.
- Now support chunked content encoding in client response parsing.
- Fixed bug with client not invoking callback when a request fails.

### v0.9.4

- Lots of URI fixes.
- Fixed async_server’s request handler so it doesn’t make copies of the supplied handler.
- Fix for issue #73 regarding SSL connections ending in short read errors.
- Final C++03-only release.

### v0.9.3

- URI, HTTP client and HTTP server are now built as static libraries (`libcppnetlib-uri.a`, `libcppnetlib-client-connections.a` and `libcppnetlib-server-parsers.a` on Linux and `cppnetlib-uri.lib`, `cppnetlib-client-connections.lib` and `cppnetlib-server-parsers.lib` on Windows).
- Updated URI parser.
- A new URI builder.
- URI support for IPv6 RFC 2732.
- Fixed issues #67, #72, #78, #79, #80, #81, #82, #83.
- New examples for the HTTP client, including an Atom feed, an RSS feed and a very simple client that uses the Twitter Search API.

### v0.9.2

- Critial bug fixes to v0.9.1.

### v0.9.1

- Introduced macro `BOOST_NETWORK_DEFAULT_TAG` to allow for programmatically defining the default flag to use throughout the compilation unit.
- Support for streaming body handlers when performing HTTP client operations. See documentation for HTTP client interface for more information.
- Numerous bug fixes from v0.9.0.
- Google, Inc. contributions.

### v0.9.0

- IMPORTANT BREAKING CHANGE: By default all compile-time heavy parser implementations are now compiled to external static libraries. In order to use `cpp-netlib` in header-only mode, users must define the preprocessor macro `BOOST_NETWORK_NO_LIB` before including any `cpp-netlib` header. This breaks code that relied on the version 0.8.x line where the library is strictly header-only.
- Fix issue #41: Introduce a macro `BOOST_NETWORK_HTTP_CLIENT_DEFAULT_TAG` which makes the default HTTP client use `tags::http_async_8bit_udp_resolve` as the tag.
- Fix issue #40: Write the status line and headers in a single buffer write instead of two writes.
- More consistent message API for client and server messages (request and response objects).
- Refactoring of internal implementations to allow better separation of concerns and more manageable coding/documentation.
- Client and server constructors that support Boost.Parameter named parameters.
- Client and server constructors now take in an optional reference to a Boost.Asio `io_service` to use internally.
- Documentation updates to reflect new APIs.

## `cpp-netlib` 0.8

- Updates to URI unit tests and documentation.
- More documentation, covering the HTTP Client and HTTP Server APIs
- Asynchronous HTTP Server that now supports running request handlers on a different thread pool.
- An initial thread pool implementation, using Boost.Asio underneath.
- Adding a ready(...) wrapper to check whether a response object returned by the asynchronous client in 0.7 already has all the parts available.
- Some attempts at lowering compile time costs.

## `cpp-netlib` 0.7

- Radical documentation overhaul
- Asynchronous HTTP client
- Tag dispatch overhaul, using Boost.MPL
- HTTP Client Facade refactoring
- Bug fixes for HTTP 1.1 response parsing
- Minimized code repetition with some header macro’s
- Configurable HTTPS support in the library with `BOOST_NETWORK_ENABLE_HTTPS`

## `cpp-netlib` 0.6

- Many fixes for MSVC compiler

## `cpp-netlib` 0.5

- An embeddable HTTP 1.1 server
- An HTTP 1.1 client upgraded to support HTTPS
- An updated URI parser implementation
- An asynchronous HTTP 1.1 client
- An HTTP 1.1 client that supports streaming function handlers