WebSocket++  0.8.1
C++ websocket client/server library
changelog.md
1 HEAD
2 
3 0.8.1 - 2018-07-16
4 Note: This release does not change library behavior. It only corrects issues
5 in the installer and test system.
6 - Test Suite: Adjust test suite to match behavior introduced in 0.8.0. Thank
7  you Gianfranco Costamagna for reporting and a patch. #731
8 - CMake: Update cmake installer to only install library files globally.
9  Thank you Gianfraco Costamanga for reporting and a patch. #732
10 
11 0.8.0 - 2018-07-12
12 - Examples: Add `print_client` example. This demonstrates a minimal non-TLS
13  client that connects to a server and prints out the messages it receives.
14 - Examples: Add `print_client_tls` example. This demonstrates a minimal TLS
15  client, including basic support via Asio+OpenSSL for certificate chain
16  and hostname verification.
17 - Feature: Add getter for all headers to the HTTP parsers. This allows a
18  wrapping library to enumerate all headers to send upstream. Thank you Jupp
19  Müller for reporting and an initial pull request.
20 - Improvement: Move the `socket_init_handler` to execute as a part of `init_asio`
21  rather than connection `pre_init`. This allows setting of socket options prior
22  to the bind/listen/accept system calls. Thank you ChristianRobl3D for
23  reporting #530.
24 - Improvement: Timers in transport integration tests should only fail if their
25  own test times out, rather than any test. #643 Thank you Alex Korotkin for
26  reporting and a patch.
27 - Improvement: Preserve transport layer error codes in more cases, particularly
28  during calls to `endpoint::listen`. #652 Thank you vadz for reporting and
29  patches.
30 - Compatibility: Make sure the chrono library used by Boost/Asio is in sync
31  with what the websocketpp is using. Thank you Flow86 for reporting and a
32  patch.
33 - Compatibility: Update `telemetry_client` to use a slightly more cross platform
34  method of sleeping. Should work on windows now. Thank you Meir Yanovich for
35  reporting.
36 - Compatibility: Updated permessage-deflate support to reflect that the zlib
37  library does not actually support a sliding window size of 256 bits.
38  WebSocket++ will no longer negotiate 256 bit deflate windows. If the user
39  of the library tries to request a 256 bit window a 512 bit window will be
40  specified instead (This was the previous behavior). #596 #653 Thank you
41  Vinnie Falco and Gianfranco Costamagna for reporting.
42 - Compatibility: Better error handling and logging in cases where extension
43  requests parse correctly but negotiation fails.
44 - Compatibility: Removed custom handling of `SSL_R_SHORT_READ` error condition.
45  This error code no longer exists in modern versions of OpenSSL and causes
46  a build error. It wasn't being used for anything particularly important
47  (slightly improving error reporting) and there isn't a great replacement.
48  #599 Thank you Gianfranco Costamagna for reporting.
49 - Compatibility: Add missing `<stdint>` headers. Fixes issues with g++ 5.4.0.
50  #638 Thank you Alex Korotkin for reporting and a patch.
51 - Compatibility: Remove the use of `std::auto_ptr` and `std::binary_function`
52  from builds with C++11 or later. These features are deprecated and were
53  removed entirely in C++17. This change allows building WebSocket++ on
54  C++17 compilers. #592 Thank you Michal Fojtak for reporting and a patch
55 - Compatibility: Add 1014 close code and adds missing descriptions for codes
56  1012 and 1013. #589 Thank you jbwdevries and ronneke1996 for reporting and
57  patches.
58 - Compatibility: Add hooks to support `mingw-std-threads` C++11 thread and mutex
59  polyfill library as an alternative to Boost. #608 Thank you Peter Taylor for
60  reporting and an initial patch.
61 - Compatibility: Changed the handshake connection token to 'Upgrade' from
62  'upgrade'. Technically this header is supposed to be processed case
63  insensitively. In practice, there are browsers (such as Edge) that don't do
64  this and they tend to use the uppercase value used as an example in RFC6455.
65  Thank you Johann Bauer for reporting and a patch. #727
66 - Bug: Store loggers in shared pointers to avoid crashes related to connections
67  trying to write logs entries after their respective endpoint has been
68  deallocated. Thank you Thalhammer for reporting and Jupp Müller for the
69  patch. #539 #501
70 - Bug: Change default listen backlog from 0 to `socket_base::max_connections`.
71  #549. Thank you derwassi and zwelab for reporting and na1pir for providing
72  access to hardware to debug the issue.
73 - Bug: Fix a crash in the accept loop when `get_connection` fails. #551 Thank you
74  Walter Gray for a patch.
75 - Bug/Documentation: Fix incorrect example code that used
76  `websocketpp::lib::error_code` instead of `websocketpp::exception`. Thank you
77  heretic13 for reporting
78 - Bug: Fix uninitialized shared pointer in Asio transport test suite. #647
79  Thank you Alex Korotkin for reporting and a patch.
80 - Bug: Fix a thread safety issue in the permessage-deflate extension that
81  caused message corruption when sending compressed messages from a different
82  thread than the main I/O thread. #615 Thank you KyleNyenhuis and Pieter De
83  Gendt for reporting and a patch.
84 - Bug: Fix an undefined behavior issue performing a 64 bit wide shift on a 64
85  bit value. #636 Thank you Gregor Jasny for reporting and a patch
86 - Bug: Fix some compile issues with ASIO_STANDALONE. #662 #665 Thank you
87  chronoxor and Guillaume Egles for reporting and patches.
88 
89 0.7.0 - 2016-02-22
90 - MINOR BREAKING SOCKET POLICY CHANGE: Asio transport socket policy method
91  `cancel_socket` will now return `lib::asio::error_code` instead of `void`.
92  Custom Asio transport socket policies will need to be updated accordingly.
93  This does not affect anyone using the bundled socket policies.
94 - Feature: Basic support for the permessage-deflate extension. #344
95 - Feature: Allow accessing the local endpoint when using the Asio transport.
96  This allows inspection of the address and port in cases where they are chosen
97  by the operating system rather than the user. Thank you Andreas Weis and
98  Muzahid Hussain for reporting and related code. #458
99 - Feature: Add support for subprotocols in Hybi00. Thank you Lukas Obermann
100  for reporting and a patch. #518
101 - Feature: Adds `tcp_pre_bind handler` to Asio transport. This allows setting
102  arbitrary socket options after the listen acceptor has been created but before
103  the socket bind has been performed. #634 #439 Thank you Gregor Jasny for
104  the patch.
105 - Improvement: Better automatic std::chrono feature detection for Visual Studio
106 - Improvement: Major refactoring to bundled CMake build system. CMake can now be
107  used to build all of the examples and the test suite. Thank you Thijs Wenker
108  for a significant portion of this code. #378, #435, #449
109 - Improvement: In build environments where `lib::error_code` and
110  `lib::asio::error_code` match (such as using `boost::asio` with
111  `boost::system_error` or standalone asio with `std::system_error`, transport
112  errors are passed through natively rather than being reported as a translated
113  `pass_through` error type.
114 - Improvement: Add a `get_transport_error` method to Asio transport connections
115  to allow retrieving a machine readable native transport error.
116 - Improvement: Add `connection::get_response`, `connection::get_response_code`,
117  and `connection::get_response_msg` methods to allow accessing additional
118  information about the HTTP responses that WebSocket++ sends. #465 Thank you
119  Flow86 for reporting.
120 - Improvement: Removes use of empty strings ("") in favor of `string::clear()`
121  and `string::empty()`. This avoids generating unnecessary temporary objects.
122  #468 Thank you Vladislav Yaroslavlev for reporting and a patch.
123 - Documentation: Adds an example demonstrating the use of external `io_service`
124 - Documentation: Adds a simple `echo_client` example.
125 - Documentation: Begins migration of the web based user manual into Doxygen.
126 - Bug: Fix memory leak when `init_asio` produces an error. #454 Thank you Mark
127  Grimes for reporting and fixing.
128 - Bug: Fix crash when processing a specially crafted HTTP header. Thank you Eli
129  Fidler for reporting, test cases, and a patch. #456
130 - Bug: Fix an issue where standalone Asio builds that use TLS would not compile
131  due to lingering boost code. #448 Thank you mjsp for reporting
132 - Bug: Fix an issue where canceling a socket could throw an exception on some
133  older Windows XP platforms. It now prints an appropriate set of log messages
134  instead. Thank you Thijs Wenker for reporting and researching solutions. #460
135 - Bug: Fix an issue where deferred HTTP connections that start sending a very
136  long response before their HTTP handler ends would result in a second set of
137  HTTP headers being injected into the output. Thank you Kevin Smith for
138  reporting and providing test case details. #443
139 - Bug: Fix an issue where the wrong type of strand was being created. Thank you
140  Bastien Brunnenstein for reporting and a patch. #462
141 - Bug: Fix an issue where TLS includes were broken for Asio Standalone builds.
142  Thank you giachi and Bastien Brunnenstein for reporting. #491
143 - Bug: Remove the use of cached read and write handlers in the Asio transport.
144  This feature caused memory leaks when the `io_service` the connection was
145  running on was abruptly stopped. There isn't a clean and safe way of using
146  this optimization without global state and the associated locks. The locks
147  perform worse. Thank you Xavier Gibert for reporting, test cases, and code.
148  Fixes #490.
149 - Bug: Fix a heap buffer overflow when checking very short URIs. Thank you
150  Xavier Gibert for reporting and a patch #524
151 - Compatibility: Fixes a number of build & config issues on Visual Studio 2015
152 - Compatibility: Removes non-standards compliant masking behavior. #395, #469
153 - Compatibility: Replace deprecated use of `auto_ptr` on systems where
154  `unique_ptr` is available.
155 
156 0.6.0 - 2015-06-02
157 - MINOR BREAKING TRANSPORT POLICY CHANGE: Custom transport policies will now be
158  required to include a new method `void set_uri(uri_ptr u)`. An implementation
159  is not required. The stub transport policy includes an example stub method
160  that can be added to any existing custom transport policy to fulfill this
161  requirement. This does not affect anyone using the bundled transports or
162  configs.
163 - MINOR BREAKING SOCKET POLICY CHANGE: Custom asio transport socket policies
164  will now be required to include a new method `void set_uri(uri_ptr u)`. Like
165  with the transport layer, an implementation is not required. This does not
166  affect anyone using the bundled socket policies.
167 - MINOR BREAKING DEPENDENCY CHANGE: When using Boost versions greater than or
168  equal to 1.49 in C++03 mode, `libboost-chrono` is needed now instead of
169  `libboost-date_time`. Users with C++11 compilers or using Boost versions 1.48
170  and earlier are not affected. Note: This change affects the bundled unit test
171  suite.
172 - Feature: WebSocket++ Asio transport policy can now be used with the standalone
173  version of Asio (1.8.0+) when a C++11 compiler and standard library are
174  present. This means that it is possible now to use WebSocket++'s Asio
175  transport entirely without Boost. Thank you Robert Seiler for proof of concept
176  code that was used as a guide for this implementation. Fixes #324
177 - Feature: Adds a vectored/scatter-gather write handler to the iostream
178  transport.
179 - Feature: Adds the ability to defer sending an HTTP response until sometime
180  after the `http_handler` is run. This allows processing of long running http
181  handlers to defer their response until it is ready without blocking the
182  network thread. references #425
183 - Improvement: `echo_server_tls` has been update to demonstrate how to configure
184  it for Mozilla's recommended intermediate and modern TLS security profiles.
185 - Improvement: `endpoint::set_timer` now uses a steady clock provided by
186  `boost::chrono` or `std::chrono` where available instead of the non-monotonic
187  system clock. Thank you breyed for reporting. fixes #241
188 - Improvement: Outgoing TLS connections to servers using the SNI extension to
189  choose a certificate will now work. Thank you moozzyk for reporting.
190  Fixes #400
191 - Improvement: Removes an unnecessary mutex lock in `get_con_from_hdl`.
192 - Cleanup: Asio transport policy has been refactored to remove many Boost
193  dependencies. On C++03 compilers the `boost::noncopyable` dependency has been
194  removed and the `boost::date_time` dependency has been replaced with the newer
195  `boost::chrono` when possible. On C++11 compilers the `boost::aligned_storage`
196  and `boost::date_time` dependencies are gone, replaced with equivalent C++11
197  standard library features.
198 - Bug: Fixes a potential dangling pointer and inconsistent error message
199  handling in `websocketpp::exception`. #432 Thank you Tom Swirly for the fix.
200 
201 0.5.1 - 2015-02-27
202 - Bug: Fixes an issue where some frame data was counted against the max header
203  size limit, resulting in connections that included a lot of frame data
204  immediately after the opening handshake to fail.
205 - Bug: Fix a typo in the name of the set method for `max_http_body_size`. #406
206  Thank you jplatte for reporting.
207 
208 0.5.0 - 2015-01-22
209 - BREAKING UTILITY CHANGE: Deprecated methods `http::parser::parse_headers`,
210  `http::response::parse_complete`, and `http::request::parse_complete` have
211  been removed.
212 - Security: Disabled SSLv3 in example servers.
213 - Feature: Adds basic support for accessing HTTP request bodies in the http
214  handler. #181
215 - Feature: Adds the ability to register a shutdown handler when using the
216  iostream transport. This provides a clean interface for triggering the shut
217  down of external sockets and other cleanup without hooking in to higher level
218  WebSocket handlers.
219 - Feature: Adds the ability to register a write handler when using the iostream
220  transport. This handler can be used to handle transport output in place of
221  registering an ostream to write to.
222 - Feature: Adds a new logging policy that outputs to syslog. #386 Thank you Tom
223  Hughes for submitting the initial version of this policy.
224 - Improvement: Message payload logging now prints text for text messages rather
225  than binary.
226 - Improvement: Overhaul of handshake state machine. Should make it impossible
227  for exceptions to bubble out of transport methods like `io_service::run`.
228 - Improvement: Overhaul of handshake error reporting. Fail handler error codes
229  will be more detailed and precise. Adds new [fail] and [http] logging channels
230  that log failed websocket connections and successful HTTP connections
231  respectively. A new aggregate channel package, `alevel::access_core`, allows
232  enabling connect, disconnect, fail, and http together. Successful HTTP
233  connections will no longer trigger a fail handler.
234 - Improvement: Ability to terminate connection during an http handler to cleanly
235  suppress the default outgoing HTTP response.
236 - Documentation: Add Sending & Receiving Messages step to chapter one of the
237  `utility_client` tutorial. Update `utility_client` example to match.
238 - Cleanup: Removes unused files & STL includes. Adds required STL includes.
239  Normalizes include order.
240 - Bug: Fixes a fatal state error when a handshake response is completed
241  immediately after that handshake times out. #389
242 - Bug: MinGW fixes; C++11 feature detection, localtime use. #393 Thank you
243  Schebb for reporting, code, and testing.
244 - Bug: Fixes an issue where `websocketpp::exception::what()` could return an out
245  of scope pointer. #397 Thank you fabioang for reporting.
246 - Bug: Fixes an issue where endpoints were not reset properly after a call to
247  `endpoint::listen` failed. #390 Thank you wyyqyl for reporting.
248 
249 0.4.0 - 2014-11-04
250 - BREAKING API CHANGE: All WebSocket++ methods now throw an exception of type
251  `websocketpp::exception` which derives from `std::exception`. This normalizes
252  all exception types under the standard exception hierarchy and allows
253  WebSocket++ exceptions to be caught in the same statement as others. The error
254  code that was previously thrown is wrapped in the exception object and can be
255  accessed via the `websocketpp::exception::code()` method.
256 - BREAKING API CHANGE: Custom logging policies have some new required
257  constructors that take generic config settings rather than pointers to
258  std::ostreams. This allows writing logging policies that do not involve the
259  use of std::ostream. This does not affect anyone using the built in logging
260  policies.
261 - BREAKING UTILITY CHANGE: `websocketpp::lib::net::htonll` and
262  `websocketpp::lib::net::ntohll` have been prefixed with an underscore to avoid
263  conflicts with similarly named macros in some operating systems. If you are
264  using the WebSocket++ provided 64 bit host/network byte order functions you
265  will need to switch to the prefixed versions.
266 - BREAKING UTILITY CHANGE: The signature of `base64_encode` has changed from
267  `websocketpp::base64_encode(unsigned char const *, unsigned int)` to
268  `websocketpp::base64_encode(unsigned char const *, size_t)`.
269 - BREAKING UTILITY CHANGE: The signature of `sha1::calc` has changed from
270  `websocketpp::sha1::calc(void const *, int, unsigned char *)` to
271  `websocketpp::sha1::calc(void const *, size_t, unsigned char *)`
272 - Feature: Adds incomplete `minimal_server` and `minimal_client` configs that
273  can be used to build custom configs without pulling in the dependencies of
274  `core` or `core_client`. These configs will offer a stable base config to
275  future-proof custom configs.
276 - Improvement: Core library no longer has std::iostream as a dependency.
277  std::iostream is still required for the optional iostream logging policy and
278  iostream transport.
279 - Bug: C++11 Chrono support was being incorrectly detected by the `boost_config`
280  header. Thank you Max Dmitrichenko for reporting and a patch.
281 - Bug: use of `std::put_time` is now guarded by a unique flag rather than a
282  chrono library flag. Thank you Max Dmitrichenko for reporting.
283 - Bug: Fixes non-thread safe use of std::localtime. #347 #383
284 - Compatibility: Adjust usage of std::min to be more compatible with systems
285  that define a min(...) macro.
286 - Compatibility: Removes unused parameters from all library, test, and example
287  code. This assists with those developing with -Werror and -Wunused-parameter
288  #376
289 - Compatibility: Renames ntohll and htonll methods to avoid conflicts with
290  platform specific macros. #358 #381, #382 Thank you logotype, unphased,
291  svendjo
292 - Cleanup: Removes unused functions, fixes variable shadow warnings, normalizes
293  all whitespace in library, examples, and tests to 4 spaces. #376
294 
295 0.3.0 - 2014-08-10
296 - Feature: Adds `start_perpetual` and `stop_perpetual` methods to asio transport
297  These may be used to replace manually managed `asio::io_service::work` objects
298 - Feature: Allow setting pong and handshake timeouts at runtime.
299 - Feature: Allows changing the listen backlog queue length.
300 - Feature: Split tcp init into pre and post init.
301 - Feature: Adds URI method to extract query string from URI. Thank you Banaan
302  for code. #298
303 - Feature: Adds a compile time switch to asio transport config to disable
304  certain multithreading features (some locks, asio strands)
305 - Feature: Adds the ability to pause reading on a connection. Paused connections
306  will not read more data from their socket, allowing TCP flow control to work
307  without blocking the main thread.
308 - Feature: Adds the ability to specify whether or not to use the `SO_REUSEADDR`
309  TCP socket option. The default for this value has been changed from `true` to
310  `false`.
311 - Feature: Adds the ability to specify a maximum message size.
312 - Feature: Adds `close::status::get_string(...)` method to look up a human
313  readable string given a close code value.
314 - Feature: Adds `connection::read_all(...)` method to iostream transport as a
315  convenience method for reading all data into the connection buffer without the
316  end user needing to manually loop on `read_some`.
317 - Improvement: Open, close, and pong timeouts can be disabled entirely by
318  setting their duration to 0.
319 - Improvement: Numerous performance improvements. Including: tuned default
320  buffer sizes based on profiling, caching of handler binding for async
321  reads/writes, non-malloc allocators for read/write handlers, disabling of a
322  number of questionably useful range sanity checks in tight inner loops.
323 - Improvement: Cleaned up the handling of TLS related errors. TLS errors will
324  now be reported with more detail on the info channel rather than all being
325  `tls_short_read` or `pass_through`. In addition, many cases where a TLS short
326  read was in fact expected are no longer classified as errors. Expected TLS
327  short reads and quasi-expected socket shutdown related errors will no longer
328  be reported as unclean WebSocket shutdowns to the application. Information
329  about them will remain in the info error channel for debugging purposes.
330 - Improvement: `start_accept` and `listen` errors are now reported to the caller
331  either via an exception or an ec parameter.
332 - Improvement: Outgoing writes are now batched for improved message throughput
333  and reduced system call and TCP frame overhead.
334 - Bug: Fix some cases of calls to empty lib::function objects.
335 - Bug: Fix memory leak of connection objects due to cached handlers holding on to
336  reference counted pointers. #310 Thank you otaras for reporting.
337 - Bug: Fix issue with const endpoint accessors (such as `get_user_agent`) not
338  compiling due to non-const mutex use. #292 Thank you logofive for reporting.
339 - Bug: Fix handler allocation crash with multithreaded `io_service`.
340 - Bug: Fixes incorrect whitespace handling in header parsing. #301 Thank you
341  Wolfram Schroers for reporting
342 - Bug: Fix a crash when parsing empty HTTP headers. Thank you Thingol for
343  reporting.
344 - Bug: Fix a crash following use of the `stop_listening` function. Thank you
345  Thingol for reporting.
346 - Bug: Fix use of variable names that shadow function parameters. The library
347  should compile cleanly with -Wshadow now. Thank you giszo for reporting. #318
348 - Bug: Fix an issue where `set_open_handshake_timeout` was ignored by server
349  code. Thank you Robin Rowe for reporting.
350 - Bug: Fix an issue where custom timeout values weren't being propagated from
351  endpoints to new connections.
352 - Bug: Fix a number of memory leaks related to server connection failures. #323
353  #333 #334 #335 Thank you droppy and aydany for reporting and patches.
354  reporting.
355 - Compatibility: Fix compile time conflict with Visual Studio's MIN/MAX macros.
356  Thank you Robin Rowe for reporting.
357 - Documentation: Examples and test suite build system now defaults to clang on
358  OS X
359 
360 0.3.0-alpha4 - 2013-10-11
361 - HTTP requests ending normally are no longer logged as errors. Thank you Banaan
362  for reporting. #294
363 - Eliminates spurious expired timers in certain error conditions. Thank you
364  Banaan for reporting. #295
365 - Consolidates all bundled library licenses into the COPYING file. #294
366 - Updates bundled sha1 library to one with a cleaner interface and more
367  straight-forward license. Thank you lotodore for reporting and Evgeni Golov
368  for reviewing. #294
369 - Re-introduces strands to asio transport, allowing `io_service` thread pools to
370  be used (with some limitations).
371 - Removes endpoint code that kept track of a connection list that was never used
372  anywhere. Removes a lock and reduces connection creation/deletion complexity
373  from O(log n) to O(1) in the number of connections.
374 - A number of internal changes to transport APIs
375 - Deprecates iostream transport `readsome` in favor of `read_some` which is more
376  consistent with the naming of the rest of the library.
377 - Adds preliminary signaling to iostream transport of eof and fatal transport
378  errors
379 - Updates transport code to use shared pointers rather than raw pointers to
380  prevent asio from retaining pointers to connection methods after the
381  connection goes out of scope. #293 Thank you otaras for reporting.
382 - Fixes an issue where custom headers couldn't be set for client connections
383  Thank you Jerry Win and Wolfram Schroers for reporting.
384 - Fixes a compile error on visual studio when using interrupts. Thank you Javier
385  Rey Neira for reporting this.
386 - Adds new 1012 and 1013 close codes per IANA registry
387 - Add `set_remote_endpoint` method to iostream transport.
388 - Add `set_secure` method to iostream transport.
389 - Fix typo in .gitattributes file. Thank you jstarasov for reporting this. #280
390 - Add missing locale include. Thank you Toninoso for reporting this. #281
391 - Refactors `asio_transport` endpoint and adds full documentation and exception
392  free varients of all methods.
393 - Removes `asio_transport` endpoint method cancel(). Use `stop_listen()` instead
394 - Wrap internal `io_service` `run_one()` method
395 - Suppress error when trying to shut down a connection that was already closed
396 
397 0.3.0-alpha3 - 2013-07-16
398 - Minor refactor to bundled sha1 library
399 - HTTP header comparisons are now case insensitive. #220, #275
400 - Refactors URI to be exception free and not use regular expressions. This
401  eliminates the dependency on boost or C++11 regex libraries allowing native
402  C++11 usage on GCC 4.4 and higher and significantly reduces staticly built
403  binary sizes.
404 - Updates handling of Server and User-Agent headers to better handle custom
405  settings and allow suppression of these headers for security purposes.
406 - Fix issue where pong timeout handler always fired. Thank you Steven Klassen
407  for reporting this bug.
408 - Add ping and pong endpoint wrapper methods
409 - Add `get_request()` pass through method to connection to allow calling methods
410  specific to the HTTP policy in use.
411 - Fix issue compile error with `WEBSOCKETPP_STRICT_MASKING` enabled and another
412  issue where `WEBSOCKETPP_STRICT_MASKING` was not applied to incoming messages.
413  Thank you Petter Norby for reporting and testing these bugs. #264
414 - Add additional macro guards for use with boost_config. Thank you breyed
415  for testing and code. #261
416 
417 0.3.0-alpha2 - 2013-06-09
418 - Fix a regression that caused servers being sent two close frames in a row
419  to end a connection uncleanly. #259
420 - Fix a regression that caused spurious frames following a legitimate close
421  frames to erroneously trigger handlers. #258
422 - Change default HTTP response error code when no http_handler is defined from
423  500/Internal Server Error to 426/Upgrade Required
424 - Remove timezone from logger timestamp to work around issues with the Windows
425  implementation of strftime. Thank you breyed for testing and code. #257
426 - Switch integer literals to char literals to improve VCPP compatibility.
427  Thank you breyed for testing and code. #257
428 - Add MSVCPP warning suppression for the bundled SHA1 library. Thank you breyed
429  for testing and code. #257
430 
431 0.3.0-alpha1 - 2013-06-09
432 - Initial Release