websocketpp  0.6.0
C++/Boost Asio based websocket client/server library
changelog.md
1 HEAD
2 
3 0.6.0
4 - MINOR BREAKING TRANSPORT POLICY CHANGE: Custom transport policies will now be
5  required to include a new method `void set_uri(uri_ptr u)`. An implementation
6  is not required. The stub transport policy includes an example stub method
7  that can be added to any existing custom transport policy to fulfill this
8  requirement. This does not affect anyone using the bundled transports or
9  configs.
10 - MINOR BREAKING SOCKET POLICY CHANGE: Custom asio transport socket policies
11  will now be required to include a new method `void set_uri(uri_ptr u)`. Like
12  with the transport layer, an implementation is not required. This does not
13  affect anyone using the bundled socket policies.
14 - MINOR BREAKING DEPENDENCY CHANGE: When using Boost versions greater than or
15  equal to 1.49 in C++03 mode, `libboost-chrono` is needed now instead of
16  `libboost-date_time`. Users with C++11 compilers or using Boost versions 1.48
17  and earlier are not affected. Note: This change affects the bundled unit test
18  suite.
19 - Feature: WebSocket++ Asio transport policy can now be used with the standalone
20  version of Asio (1.8.0+) when a C++11 compiler and standard library are
21  present. This means that it is possible now to use WebSocket++'s Asio
22  transport entirely without Boost. Thank you Robert Seiler for proof of concept
23  code that was used as a guide for this implementation. Fixes #324
24 - Feature: Adds a vectored/scatter-gather write handler to the iostream
25  transport.
26 - Feature: Adds the ability to defer sending an HTTP response until sometime
27  after the `http_handler` is run. This allows processing of long running http
28  handlers to defer their response until it is ready without blocking the
29  network thread. references #425
30 - Improvement: `echo_server_tls` has been update to demonstrate how to configure
31  it for Mozilla's recommended intermediate and modern TLS security profiles.
32 - Improvement: `endpoint::set_timer` now uses a steady clock provided by
33  `boost::chrono` or `std::chrono` where available instead of the non-monotonic
34  system clock. Thank you breyed for reporting. fixes #241
35 - Improvement: Outgoing TLS connections to servers using the SNI extension to
36  choose a certificate will now work. Thank you moozzyk for reporting.
37  Fixes #400
38 - Improvement: Removes an unnecessary mutex lock in `get_con_from_hdl`.
39 - Cleanup: Asio transport policy has been refactored to remove many Boost
40  dependencies. On C++03 compilers the `boost::noncopyable` dependency has been
41  removed and the `boost::date_time` dependency has been replaced with the newer
42  `boost::chrono` when possible. On C++11 compilers the `boost::aligned_storage`
43  and `boost::date_time` dependencies are gone, replaced with equivalent C++11
44  standard library features.
45 - Bug: Fixes a potential dangling pointer and inconsistent error message
46  handling in `websocketpp::exception`. #432 Thank you Tom Swirly for the fix.
47 
48 0.5.1 - 2015-02-27
49 - Bug: Fixes an issue where some frame data was counted against the max header
50  size limit, resulting in connections that included a lot of frame data
51  immediately after the opening handshake to fail.
52 - Bug: Fix a typo in the name of the set method for `max_http_body_size`. #406
53  Thank you jplatte for reporting.
54 
55 0.5.0 - 2015-01-22
56 - BREAKING UTILITY CHANGE: Deprecated methods `http::parser::parse_headers`,
57  `http::response::parse_complete`, and `http::request::parse_complete` have
58  been removed.
59 - Security: Disabled SSLv3 in example servers.
60 - Feature: Adds basic support for accessing HTTP request bodies in the http
61  handler. #181
62 - Feature: Adds the ability to register a shutdown handler when using the
63  iostream transport. This provides a clean interface for triggering the shut
64  down of external sockets and other cleanup without hooking in to higher level
65  WebSocket handlers.
66 - Feature: Adds the ability to register a write handler when using the iostream
67  transport. This handler can be used to handle transport output in place of
68  registering an ostream to write to.
69 - Feature: Adds a new logging policy that outputs to syslog. #386 Thank you Tom
70  Hughes for submitting the initial version of this policy.
71 - Improvement: Message payload logging now prints text for text messages rather
72  than binary.
73 - Improvement: Overhaul of handshake state machine. Should make it impossible
74  for exceptions to bubble out of transport methods like `io_service::run`.
75 - Improvement: Overhaul of handshake error reporting. Fail handler error codes
76  will be more detailed and precise. Adds new [fail] and [http] logging channels
77  that log failed websocket connections and successful HTTP connections
78  respectively. A new aggregate channel package, `alevel::access_core`, allows
79  enabling connect, disconnect, fail, and http together. Successful HTTP
80  connections will no longer trigger a fail handler.
81 - Improvement: Ability to terminate connection during an http handler to cleanly
82  suppress the default outgoing HTTP response.
83 - Documentation: Add Sending & Receiving Messages step to chapter one of the
84  `utility_client` tutorial. Update `utility_client` example to match.
85 - Cleanup: Removes unused files & STL includes. Adds required STL includes.
86  Normalizes include order.
87 - Bug: Fixes a fatal state error when a handshake response is completed
88  immediately after that handshake times out. #389
89 - Bug: MinGW fixes; C++11 feature detection, localtime use. #393 Thank you
90  Schebb for reporting, code, and testing.
91 - Bug: Fixes an issue where `websocketpp::exception::what()` could return an out
92  of scope pointer. #397 Thank you fabioang for reporting.
93 - Bug: Fixes an issue where endpoints were not reset properly after a call to
94  `endpoint::listen` failed. #390 Thank you wyyqyl for reporting.
95 
96 0.4.0 - 2014-11-04
97 - BREAKING API CHANGE: All WebSocket++ methods now throw an exception of type
98  `websocketpp::exception` which derives from `std::exception`. This normalizes
99  all exception types under the standard exception hierarchy and allows
100  WebSocket++ exceptions to be caught in the same statement as others. The error
101  code that was previously thrown is wrapped in the exception object and can be
102  accessed via the `websocketpp::exception::code()` method.
103 - BREAKING API CHANGE: Custom logging policies have some new required
104  constructors that take generic config settings rather than pointers to
105  std::ostreams. This allows writing logging policies that do not involve the
106  use of std::ostream. This does not affect anyone using the built in logging
107  policies.
108 - BREAKING UTILITY CHANGE: `websocketpp::lib::net::htonll` and
109  `websocketpp::lib::net::ntohll` have been prefixed with an underscore to avoid
110  conflicts with similarly named macros in some operating systems. If you are
111  using the WebSocket++ provided 64 bit host/network byte order functions you
112  will need to switch to the prefixed versions.
113 - BREAKING UTILITY CHANGE: The signature of `base64_encode` has changed from
114  `websocketpp::base64_encode(unsigned char const *, unsigned int)` to
115  `websocketpp::base64_encode(unsigned char const *, size_t)`.
116 - BREAKING UTILITY CHANGE: The signature of `sha1::calc` has changed from
117  `websocketpp::sha1::calc(void const *, int, unsigned char *)` to
118  `websocketpp::sha1::calc(void const *, size_t, unsigned char *)`
119 - Feature: Adds incomplete `minimal_server` and `minimal_client` configs that
120  can be used to build custom configs without pulling in the dependencies of
121  `core` or `core_client`. These configs will offer a stable base config to
122  future-proof custom configs.
123 - Improvement: Core library no longer has std::iostream as a dependency.
124  std::iostream is still required for the optional iostream logging policy and
125  iostream transport.
126 - Bug: C++11 Chrono support was being incorrectly detected by the `boost_config`
127  header. Thank you Max Dmitrichenko for reporting and a patch.
128 - Bug: use of `std::put_time` is now guarded by a unique flag rather than a
129  chrono library flag. Thank you Max Dmitrichenko for reporting.
130 - Bug: Fixes non-thread safe use of std::localtime. #347 #383
131 - Compatibility: Adjust usage of std::min to be more compatible with systems
132  that define a min(...) macro.
133 - Compatibility: Removes unused parameters from all library, test, and example
134  code. This assists with those developing with -Werror and -Wunused-parameter
135  #376
136 - Compatibility: Renames ntohll and htonll methods to avoid conflicts with
137  platform specific macros. #358 #381, #382 Thank you logotype, unphased,
138  svendjo
139 - Cleanup: Removes unused functions, fixes variable shadow warnings, normalizes
140  all whitespace in library, examples, and tests to 4 spaces. #376
141 
142 0.3.0 - 2014-08-10
143 - Feature: Adds `start_perpetual` and `stop_perpetual` methods to asio transport
144  These may be used to replace manually managed `asio::io_service::work` objects
145 - Feature: Allow setting pong and handshake timeouts at runtime.
146 - Feature: Allows changing the listen backlog queue length.
147 - Feature: Split tcp init into pre and post init.
148 - Feature: Adds URI method to extract query string from URI. Thank you Banaan
149  for code. #298
150 - Feature: Adds a compile time switch to asio transport config to disable
151  certain multithreading features (some locks, asio strands)
152 - Feature: Adds the ability to pause reading on a connection. Paused connections
153  will not read more data from their socket, allowing TCP flow control to work
154  without blocking the main thread.
155 - Feature: Adds the ability to specify whether or not to use the `SO_REUSEADDR`
156  TCP socket option. The default for this value has been changed from `true` to
157  `false`.
158 - Feature: Adds the ability to specify a maximum message size.
159 - Feature: Adds `close::status::get_string(...)` method to look up a human
160  readable string given a close code value.
161 - Feature: Adds `connection::read_all(...)` method to iostream transport as a
162  convenience method for reading all data into the connection buffer without the
163  end user needing to manually loop on `read_some`.
164 - Improvement: Open, close, and pong timeouts can be disabled entirely by
165  setting their duration to 0.
166 - Improvement: Numerous performance improvements. Including: tuned default
167  buffer sizes based on profiling, caching of handler binding for async
168  reads/writes, non-malloc allocators for read/write handlers, disabling of a
169  number of questionably useful range sanity checks in tight inner loops.
170 - Improvement: Cleaned up the handling of TLS related errors. TLS errors will
171  now be reported with more detail on the info channel rather than all being
172  `tls_short_read` or `pass_through`. In addition, many cases where a TLS short
173  read was in fact expected are no longer classified as errors. Expected TLS
174  short reads and quasi-expected socket shutdown related errors will no longer
175  be reported as unclean WebSocket shutdowns to the application. Information
176  about them will remain in the info error channel for debugging purposes.
177 - Improvement: `start_accept` and `listen` errors are now reported to the caller
178  either via an exception or an ec parameter.
179 - Improvement: Outgoing writes are now batched for improved message throughput
180  and reduced system call and TCP frame overhead.
181 - Bug: Fix some cases of calls to empty lib::function objects.
182 - Bug: Fix memory leak of connection objects due to cached handlers holding on to
183  reference counted pointers. #310 Thank you otaras for reporting.
184 - Bug: Fix issue with const endpoint accessors (such as `get_user_agent`) not
185  compiling due to non-const mutex use. #292 Thank you logofive for reporting.
186 - Bug: Fix handler allocation crash with multithreaded `io_service`.
187 - Bug: Fixes incorrect whitespace handling in header parsing. #301 Thank you
188  Wolfram Schroers for reporting
189 - Bug: Fix a crash when parsing empty HTTP headers. Thank you Thingol for
190  reporting.
191 - Bug: Fix a crash following use of the `stop_listening` function. Thank you
192  Thingol for reporting.
193 - Bug: Fix use of variable names that shadow function parameters. The library
194  should compile cleanly with -Wshadow now. Thank you giszo for reporting. #318
195 - Bug: Fix an issue where `set_open_handshake_timeout` was ignored by server
196  code. Thank you Robin Rowe for reporting.
197 - Bug: Fix an issue where custom timeout values weren't being propagated from
198  endpoints to new connections.
199 - Bug: Fix a number of memory leaks related to server connection failures. #323
200  #333 #334 #335 Thank you droppy and aydany for reporting and patches.
201  reporting.
202 - Compatibility: Fix compile time conflict with Visual Studio's MIN/MAX macros.
203  Thank you Robin Rowe for reporting.
204 - Documentation: Examples and test suite build system now defaults to clang on
205  OS X
206 
207 0.3.0-alpha4 - 2013-10-11
208 - HTTP requests ending normally are no longer logged as errors. Thank you Banaan
209  for reporting. #294
210 - Eliminates spurious expired timers in certain error conditions. Thank you
211  Banaan for reporting. #295
212 - Consolidates all bundled library licenses into the COPYING file. #294
213 - Updates bundled sha1 library to one with a cleaner interface and more
214  straight-forward license. Thank you lotodore for reporting and Evgeni Golov
215  for reviewing. #294
216 - Re-introduces strands to asio transport, allowing `io_service` thread pools to
217  be used (with some limitations).
218 - Removes endpoint code that kept track of a connection list that was never used
219  anywhere. Removes a lock and reduces connection creation/deletion complexity
220  from O(log n) to O(1) in the number of connections.
221 - A number of internal changes to transport APIs
222 - Deprecates iostream transport `readsome` in favor of `read_some` which is more
223  consistent with the naming of the rest of the library.
224 - Adds preliminary signaling to iostream transport of eof and fatal transport
225  errors
226 - Updates transport code to use shared pointers rather than raw pointers to
227  prevent asio from retaining pointers to connection methods after the
228  connection goes out of scope. #293 Thank you otaras for reporting.
229 - Fixes an issue where custom headers couldn't be set for client connections
230  Thank you Jerry Win and Wolfram Schroers for reporting.
231 - Fixes a compile error on visual studio when using interrupts. Thank you Javier
232  Rey Neira for reporting this.
233 - Adds new 1012 and 1013 close codes per IANA registry
234 - Add `set_remote_endpoint` method to iostream transport.
235 - Add `set_secure` method to iostream transport.
236 - Fix typo in .gitattributes file. Thank you jstarasov for reporting this. #280
237 - Add missing locale include. Thank you Toninoso for reporting this. #281
238 - Refactors `asio_transport` endpoint and adds full documentation and exception
239  free varients of all methods.
240 - Removes `asio_transport` endpoint method cancel(). Use `stop_listen()` instead
241 - Wrap internal `io_service` `run_one()` method
242 - Suppress error when trying to shut down a connection that was already closed
243 
244 0.3.0-alpha3 - 2013-07-16
245 - Minor refactor to bundled sha1 library
246 - HTTP header comparisons are now case insensitive. #220, #275
247 - Refactors URI to be exception free and not use regular expressions. This
248  eliminates the dependency on boost or C++11 regex libraries allowing native
249  C++11 usage on GCC 4.4 and higher and significantly reduces staticly built
250  binary sizes.
251 - Updates handling of Server and User-Agent headers to better handle custom
252  settings and allow suppression of these headers for security purposes.
253 - Fix issue where pong timeout handler always fired. Thank you Steven Klassen
254  for reporting this bug.
255 - Add ping and pong endpoint wrapper methods
256 - Add `get_request()` pass through method to connection to allow calling methods
257  specific to the HTTP policy in use.
258 - Fix issue compile error with `WEBSOCKETPP_STRICT_MASKING` enabled and another
259  issue where `WEBSOCKETPP_STRICT_MASKING` was not applied to incoming messages.
260  Thank you Petter Norby for reporting and testing these bugs. #264
261 - Add additional macro guards for use with boost_config. Thank you breyed
262  for testing and code. #261
263 
264 0.3.0-alpha2 - 2013-06-09
265 - Fix a regression that caused servers being sent two close frames in a row
266  to end a connection uncleanly. #259
267 - Fix a regression that caused spurious frames following a legitimate close
268  frames to erroneously trigger handlers. #258
269 - Change default HTTP response error code when no http_handler is defined from
270  500/Internal Server Error to 426/Upgrade Required
271 - Remove timezone from logger timestamp to work around issues with the Windows
272  implementation of strftime. Thank you breyed for testing and code. #257
273 - Switch integer literals to char literals to improve VCPP compatibility.
274  Thank you breyed for testing and code. #257
275 - Add MSVCPP warning suppression for the bundled SHA1 library. Thank you breyed
276  for testing and code. #257
277 
278 0.3.0-alpha1 - 2013-06-09
279 - Initial Release