• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1[/
2    Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com)
3
4    Distributed under the Boost Software License, Version 1.0. (See accompanying
5    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6
7    Official repository: https://github.com/boostorg/beast
8]
9
10[section Release Notes]
11
12[/-----------------------------------------------------------------------------]
13
14[heading Boost 1.76]
15
16[*Fixes]
17
18* [issue 2139] Add executor rebind to test::stream.
19* Fix unused variable compiler warning in WebSocket async shutdown.
20
21[*Improvements]
22
23* [issue 2124] Floating point support no longer required to use Beast.
24* Reduce size of websockety compiled code by using a common buffers type for all operations.
25* HTTP Parser has improved detection of incorrect use.
26
27
28[*Miscellaneous]
29
30* [issue 2140] Add cxxstd tag to library metadata.
31* Move to Drone CI.
32* Minor documentation formatting improvements.
33* CML now finds required Boost::thread library during in-tree build.
34
35
36[heading Boost 1.75]
37
38[*Fixes]
39
40* Eliminate spurious unused parameter warning in `detect_ssl`.
41* Update Websocket examples to set the SNI for TLS connections.
42* [issue 2023] websocket async_shutdown will now shutdown the underlying TLS transport.
43* [issue 2011] File open with append_existing flag now works correctly in posix environments.
44* [issue 2039] Windows builds now link to bcrypt as required by the filesystem library.
45* [issue 2063] Logic error fixed in `advanced_server_flex` example.
46* [issue 1582] Fix unreachable code error on MSVC.
47* [issue 2070] Fix http body behaviour when body_limit it none.
48* [issue 2065] Fix behaviour of `basic_stream` when a zero-length write is requested.
49* [issue 2080] Add enums representing Sec-* HTTP headers.
50* [issue 2085] Fix `nullptr` implicit cast on `fields::set()`.
51* [issue 2029] Fix C++20 tests for `basic_stream`.
52
53[*Miscellaneous]
54
55* Add handler tracking to asynchronous operations:
56  * Define the preprocessor macro `BOOST_ASIO_ENABLE_HANDLER_TRACKING` to enable Asio handler
57    tracking in Boost.Beast asynchronous operations. Please see
58    [@boost:/doc/html/boost_asio/overview/core/handler_tracking.html asio handler tracking]
59    for details.
60* Add Bishop-Fox 2020 Security Assessment.
61
62[heading Boost 1.74]
63
64[*API Changes]
65
66* The API to Asio has undergone changes. Please refer to the Asio release notes for details.
67
68* Beast has been updated to track and respect developer choices in the use of Asio. In particular:
69 * Define `BOOST_ASIO_NO_DEPRECATED` to disallow deprecated invocation and allocation hooks.
70 * Define `BOOST_ASIO_NO_TS_EXECUTORS` to ensure that executors conform to the
71   [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0443r11.html Standard Executors] proposal.
72 * Define `BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT` to select
73   [@https://cplusplus.github.io/networking-ts/draft.pdf Networking TS] style executors by default.
74   If this macro is not defined, Asio default executors will be the
75   [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0443r11.html Standard Executors] implementation.
76
77* [issue 1897] Parser `body_limit` is optional (API Change)
78  ['Actions Required]
79  * The signature of `basic_parser<>::body_limit(n)` has changed. It now accepts an
80    optional `std::uint64_t`. The caller may indicate that no body limit is required
81    by calling `body_limit(boost::none)`. The default limits remain in place in order
82    to maintain 'safe by default' behaviour.
83
84* [issue 1934] Remove deprecated interfaces (API Change)
85  ['Actions Required]
86  * The macro `BOOST_BEAST_NO_DEPRECATED` will no longer be noticed by Beast. The only way to
87    enable deprecated functionality is now the macro `BOOST_BEAST_ALLOW_DEPRECATED` which is
88    undefined by default. That is, all deprecated behaviour is disabled by default.
89  * The following deprecated functions have been removed:
90    - `websocket::async_accept_ex`
91    - `websocket::async_handshake_ex`
92    - `websocket::accept_ex`
93    - `websocket::handshake_ex`
94    Programs still using these names should be refactored to use the `decorator` feature and
95    the remaining handshake and accept functions.
96  * `websocket::role_type` has been removed. Users should use `beast::role_type` instead.
97  * `handler_ptr` has been removed. Users should use `net::bind_handler` and/or
98    `bind_front_handler` instead.
99  * Code that depends on `mutable_data_type` should be refactored to use
100    `mutable_buffers_type`. Classes affected are:
101    - `buffers_adaptor`
102    - `flat_buffer`
103    - `flat_static_buffer`
104    - `multi_buffer`
105    - `static_buffer`
106  * The `reset` function has been removed from `flat_static_buffer`. Use the
107    `clear` function instead.
108  * The `core/type_traits.hpp` public header has been removed and along with it
109    the type trait `is_completion_handler`. Beast uses the CompletionHandler correctness
110    checks provided by Asio. In a c++20 environment, these convert to concept checks.
111  * The error code enum `invalid_code_lenths` (sic) was a synonym of `invalid_code_lengths`.
112    Affected programs should be modified to use `invalid_code_lengths`.
113  * The file `core/buffers_adapter.hpp` has been removed along with the deprecated
114    alias typename `buffers_adapter`. Affected programs should use
115  `  core/buffers_adapator.hpp` and the type `buffers_adaptor`.
116
117* [issue 1956] Deprecate `string_param` (API Change)
118  ['Actions Required]
119  `string_param`, which was previously the argument type when setting field values
120  has been replaced by `string_view`. Because of this, it is no longer possible to
121  set message field values directly as integrals.
122  Users are requied to convert numeric arguments to a string type prior to calling
123  `fields::set` et. al.
124  Beast provides the non-allocating `to_static_string()` function for this purpose.
125  To set Content-Length field manually, call `message::content_length`.
126
127[*Fixes]
128
129* [issue 1913] Fix standalone compilation error with `std::string_view`
130* [issue 1925] [issue 1916] Fix compile errors on Visual Studio with /std:c++latest
131* [issue 1924] Fix c++20 deprecation warning in `span_body`
132* [issue 1920] Fix use `buffered_read_stream` with `use_awaitable`
133* [issue 1918] Fix `async_detect_ssl` with `use_awaitable`
134* [issue 1944] Fix `FILE` namespace qualification
135* [issue 1942] Fix http read `bytes_transferred`
136* [issue 1943] Fix `basic_stream` `expires_after`
137* [issue 1980] Fix `max` compile error
138* [issue 1949] `iless` and `iequal` take part in Heterogeneous Lookup
139
140[*Miscellaneous]
141
142* [issue 1907]  OpenSSL 1.0.2 or later is required when using SSL/TLS streams.
143  This is a requirement inherited from Boost.Asio.
144
145* Additional tests have been added to ensure correct integration with C++20
146  coroutines when avaialable.
147
148[heading Boost 1.73]
149
150[*API Changes]
151
152* Nested `mutable_data_type` in Beast dynamic buffers is deprecated. Affected types:
153  - `buffers_adaptor`
154  - `flat_buffer`
155  - `flat_static_buffer`
156  - `multi_buffer`
157  - `static_buffer`
158
159
160[*Changes Required]
161
162* Use nested `mutable_buffers_type` instead of `mutable_data_type`,
163  or define `BOOST_BEAST_ALLOW_DEPRECATED`
164
165[*Miscellaneous]
166
167* Update root certificates in examples
168
169[*Fixes]
170
171* [issue 1880] Fix Content-Length parsing
172* [issue 1852] Fix examples to dispatch to strand
173* [issue 1875] Ensure `basic_stream::close` will not throw
174* [issue 1863] Field digest is endian-independent
175* [issue 1853] Fix ostream flush
176* [issue 1831] `flat_buffer::shrink_to_fit` is `noexcept`
177* [issue 1828] Fix erase field
178* [issue 1822] Examples use strands correctly
179* [issue 1818] `file_body` returns `short_read` on eof during read
180* [issue 1786] Fix bug in win32 `file_body`
181* [issue 1260] Add accessor function to File member of `basic_file_body`
182* [issue 793] `file_win32` supports UTF-8 paths
183* [issue 793] `file_stdio` supports unicode paths
184* [issue 1786] `file_win32` bodies respect `http::serializer::split`
185* Correct `buffer_bytes` documentation
186* Fix missing include in sha1.hpp
187* Fix ostream warning
188* Update broken links in README
189* Translate some win32 errors to net error codes
190* Moved-from dynamic buffers do not clear if different allocator
191* Fix compilation macro documentation
192* Clarify end-of-file behaviour in `File::read` docs
193* ostream_buffer satisfies preconditions of DynamicBuffer_v1::commit
194* Fix release build of docs
195* Fix `echo-op` test
196* Fix non-msvc cmake
197
198[heading Boost 1.72]
199
200[*Examples]
201
202* Add async-ssl-system-executor http client example
203
204* Add async-ssl-system-executor websocket client example
205
206[*Features]
207
208* Async init-fns use the executor's default token
209
210* Use automatically deduced return types for all async operations (since C++14)
211
212* Support Concepts for completion token params
213
214[*Fixes]
215
216* [issue 1664] Add default dtors to satisfy -Wnon-virtual-dtor
217
218* [issue 1682] Multiple I/O of the same type is not supported
219
220* [issue 1687] Fix signed/unsigned mismatch in file_stdio::seek
221
222* [issue 1688] basic_stream dtor cannot throw
223
224* [issue 1734] Fix leftovers in basic_parser corner case:
225
226* [issue 1751] https_get example sends the Host header
227
228* [issue 1754] Fix async_close error code when async_read times out
229
230* [issue 1782] root_certificates.hpp is not for production
231
232* Fix data race in websocket examples
233
234* Fix data race in http server examples
235
236* Squelch spurious websocket timer assert
237
238* Use the executor type in basic_stream timer
239
240[/-----------------------------------------------------------------------------]
241
242[heading Boost 1.71]
243
244
245
246[*Improvements]
247
248* [issue 1280] Add 1-element specialization for `buffers_cat`
249
250* [issue 1556] Set parser status and flags even if body limit has been reached
251
252* [issue 1567] Relax requirements for vector_body
253
254* [issue 1568] `detect_ssl` uses `bool` instead of `tribool`
255
256* [issue 1574] Replace `static_string` in HTTP parser
257
258* [issue 1606] Use `steady_timer` type
259
260* [issue 1611] Make chat websocket javascript client more user friendly
261
262* [issue 1613] Remove redundant use of `static_string`
263
264* [issue 1636] Improve performance of `http::string_to_verb`
265
266* Preserve `operation_aborted` on partial message
267
268* Remove unused `<experimental/unit_test/thread.hpp>`
269
270* Reduce the number of instantiations of `filter_token_list`
271
272* Add idle ping suspend test
273
274* Remove the use of `bind_executor` in `basic_stream`
275
276* Remove redundant template in service_base
277
278* Remove the use of `static_string` from `http::fields`
279
280* Enable split compilation in http::basic_fields
281
282* Remove redundant instation of `static_string` in websocket
283
284* Remove redundant use of `asio::coroutine` in `flat_stream`
285
286* More split compilation in rfc7230.hpp
287
288* More split compilation in websocket/detail/mask.hpp
289
290* Simplify generation of sec-websocket-key
291
292
293
294
295[*Fixes]
296
297* [issue 1332] `allocator_traits::construct` is used for user-defined types
298
299* [issue 1559] Member `get_executor` const-correctness
300
301* [issue 1569] Fix `async_detect_ssl` handler type
302
303* [issue 1570] Launder pointers
304
305* [issue 1578] Fix min/max on MSVC
306
307* [issue 1586] Fix uninitalized memory use in deflate_stream
308
309* [issue 1593] Fix UB in websocket close tests
310
311* [issue 1594] Fix data race in test stream
312
313* [issue 1599] Fix moved-from executor in idle ping timeout
314
315* [issue 1607] Remove uses of the deprecated `buffers` function
316
317* [issue 1612] Remove uses of deprecated methods in websocket tests
318
319* [issue 1620] Clean up typo in chat websocket javascript client
320
321* [issue 1621] Fix `flat_buffer` copy members
322
323* Silence gcc-8 warning
324
325* Fix `buffers_cat` iterator tests
326
327* Don't pessimize-move
328
329* Qualify calls to `beast::iequals` in basic_parser.ipp
330
331* Fix UB in websocket read tests
332
333* Simplify websocket::detail::prng
334
335* Don't over-allocate in http::basic_fields
336
337
338
339[*Documentation]
340
341* Documentation is built with SaxonHE instead of xsltproc
342
343
344
345[/-----------------------------------------------------------------------------]
346
347[heading Boost 1.70]
348
349[tip
350  The namespace alias `net` is used throughout for `boost::asio`.
351]
352
353[*New Features]
354
355* All composed operations use the new
356  [@boost:/doc/html/boost_asio/reference/async_initiate.html `net::async_initiate`]
357  internally.
358
359* New `tcp_stream` and
360  `basic_stream`
361  support:
362  * Timeouts,
363    [link beast.ref.boost__beast__basic_stream.async_read_some `async_read_some`],
364    [link beast.ref.boost__beast__basic_stream.async_write_some `async_write_some`]
365    complete with
366    [link beast.ref.boost__beast__error `error::timeout`]
367    on expiration.
368  * Traffic-shaping policies
369    [link beast.ref.boost__beast__simple_rate_policy `simple`] and
370    [link beast.ref.boost__beast__unlimited_rate_policy `unlimited`],
371    or a user-defined
372    [link beast.concepts.RatePolicy ['RatePolicy]].
373  * Supports
374    [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1322r0.html P1322R0].
375
376* `websocket::stream`
377   supports
378   * Configurable handshake timeout
379   * Configurable idle timeout
380   * Automatic idle pings
381
382* [link beast.ref.boost__beast__ssl_stream `ssl_stream`]
383  is a public interface
384
385* ([issue 1305]) Better
386  `flat_buffer`,
387  `flat_static_buffer`,
388  `multi_buffer`, and
389  `static_buffer`:
390  * Revise all reference documentation
391  * Move construction does not always invalidate buffers
392  * non-const `data()` returns a mutable buffer sequence
393  * Add `cdata()` to also return constant readable bytes
394  * Eligible member functions are declared `noexcept`
395
396* ([issue 1345]) Better
397  `flat_buffer`,
398  `multi_buffer`
399  * Add `clear`, `reserve()`, `max_size()`, `shrink_to_fit()`
400  * Respect Allocator `max_size()`
401  * Specify exception safety
402
403* ([issue 1384]) New functions
404  `bind_front_handler`
405
406* Better
407  `static_buffer`,
408  `flat_static_buffer`
409  * Add `clear()`
410  * More members are `noexcept`
411  * Specify exception safety
412
413* Faster
414  `http::string_to_field`
415
416* Dynamic buffer `clear` operations perserve capacity.
417
418* New file <boost/beast/core/buffer_traits.hpp>
419  * New variadic `is_const_buffer_sequence`
420  * New variadic `is_mutable_buffer_sequence`
421  * New trait `buffers_iterator_type`
422  * New trait `buffers_type`
423
424* New classes
425  `async_base`,
426  `stable_async_base`
427  * Handle boilerplate for writing composed operations
428  * New
429    `allocate_stable`
430    is preferred over `handler_ptr`
431
432* New
433  `buffer_bytes`
434  replacement for `net::buffer_size`
435
436* New:
437  * `saved_handler`
438  * `buffers_range_ref`
439  * `executor_type`
440  * `get_lowest_layer`,
441    `lowest_layer_type`
442  * `close_socket`,
443    `beast_close_socket`
444  * `error`,
445    `condition`
446
447* These interfaces are now public (were experimental):
448  [link beast.ref.boost__beast__flat_stream `flat_stream`],
449  [link beast.ref.boost__beast__detect_ssl `detect_ssl`],
450  [link beast.ref.boost__beast__async_detect_ssl `async_detect_ssl`].
451
452* Websocket streams use PCG as the fast random number generator,
453  for increased security.
454
455
456
457[*Documentation]
458
459* WebSocket reference documentation is revised
460
461* Updated [link beast.using_io.asio_refresher Networking Refresher]
462
463* Revised [link beast.using_io.writing_composed_operations.echo Asynchronous Echo]
464
465* Rewritten [link beast.using_io.writing_composed_operations.detect_ssl [*Detect SSL Handshake]]
466
467
468
469[*API Changes]
470
471* The __Fields__ concept is deprecated and will be removed
472  in a future version. ['Actions Required]: Do not rely on
473  the ['Fields] concept.
474
475* `handler_ptr` is deprecated. ['Actions Required]: Use
476  `stable_async_base` and
477  `allocate_stable`
478  instead.
479
480* On Windows, Visual Studio 2017 or later is required
481
482* OpenSSL is required to build the examples and tests
483
484* HTTP stream algorithms return the number of bytes transferred
485  from the stream. Previously, they returned the number of bytes
486  consumed by the parser.
487  ['Actions Required]:
488  * Callers depending on the return value of
489    `http::read` or
490    `http::async_read`
491    overloads should adjust the usage of
492    the returned value as needed.
493
494* Metafunctions
495  `has_get_executor`,
496  `is_sync_stream`,
497  `is_sync_read_stream`,
498  `is_sync_write_stream`,
499  `is_async_stream`,
500  `is_async_read_stream`, and
501  `is_async_write_stream`
502  are in stream_traits.hpp.
503  ['Actions Required]: Include stream_traits.hpp as needed.
504
505* `basic_parser`
506  is abstract.
507  ['Actions Required]
508  * Change uses of the `basic_parser` type to omit the `Derived`
509    template parameter
510  * Classes derived from `basic_parser` no longer need to friend
511    the base.
512  * Virtual functions in the derived class may be marked `override`.
513
514* Metafunction
515  `is_file`
516  is in file_base.hpp.
517  ['Actions Required]: Include file_base.hpp as needed.
518
519* `flat_static_buffer::reset()`
520  is deprecated.
521  ['Actions Required]:
522  * call
523    `clear()` instead.
524
525* `buffers_adapter` is spelled
526  `buffers_adaptor`.
527  ['Actions Required]:
528  * Replace `buffers_adapter` with
529    `buffers_adaptor`,
530    or define `BOOST_BEAST_ALLOW_DEPRECATED`.
531
532* `buffers` is spelled
533  `make_printable`.
534  ['Actions Required]:
535  * Replace `buffers` with
536    `make_printable`,
537    and include "make_printable.hpp" instead of "ostream.hpp".
538
539* `file_mode::append_new` is removed, as it makes no sense.
540  ['Actions Required]:
541  - Replace `file_mode::append_new` with either
542    `file_mode::append` or
543    `file_mode::append_existing`
544    as needed.
545
546* `role_type` is moved from `websocket` to `beast`
547
548* `buffers_range_ref`
549  is preferred to `std::reference_wrapper`.
550  ['Actions Required]:
551  - Call
552    `buffers_range_ref`
553    with the buffer, instead of calling
554    `buffers_range`
555    with a reference wrapper constructed from the buffer.
556
557* Nested `lowest_layer` and `lowest_layer_type` are removed.
558  ['Actions Required]: Use the free function
559  `get_lowest_layer` and the
560  type trait
561  `lowest_layer_type` instead.
562
563* WebSocket decorator is a socket option:
564  * Overloads of the following functions which accept a Decorator
565    are deprecated:
566    - `accept`, `accept_ex`
567    - `handshake`, `handshake_ex`
568    - `async_accept`, `async_accept_ex`
569    - `async_handshake`, `async_handshake_ex`
570
571* ([issue 1375]) The value returned from `basic_parser::content_length`
572  no longer changes as the body of the message is received.
573  ['Actions Required]: Call `basic_parser::content_length_remaining` instead
574  of `basic_parser::content_length` in order to determine the remaining
575  number of bytes in the body.
576
577
578[*Examples]
579
580* All example programs are updated:
581  * Use
582    `tcp_stream`
583    with timeouts (HTTP)
584  * Use
585    `ssl_stream`
586  * Set timeouts for WebSocket streams.
587  * Use
588    `bind_front_handler`
589
590* ([issue 1100]) http-crawl clears the response before each read
591
592* ([issue 1347]) echo-op is rewritten
593
594* ([issue 1401]) Examples use
595  `flat_buffer`
596
597* Advanced servers use HTTP parser interfaces for reading
598
599* detect-ssl is rewritten
600
601* New example [path_link example/websocket/server/chat-multi example/websocket/server/chat-multi]
602
603* `async_echo` works with move-only handlers
604
605* cppcon2018 example is removed
606
607
608
609[*Fixes]
610
611* ([issue 38]) Better treatment of SSL short reads
612
613* ([issue 1223]) HTTP read counts bytes correctly when an error occurs
614
615* ([issue 1247]) Update `ssl_stream`
616  for Asio changes
617
618* ([issue 1279]) Enable explicit instantiations of
619  `websocket::stream`
620
621* ([issue 1290]) Don't use deprecated Asio interfaces
622
623* ([issue 1306]) `http::message`
624  is not-a `boost::empty_value`
625
626* ([issue 1306]) `test::stream`
627  has fewer dependencies
628
629* ([issue 1358]) Destroy abandoned websocket ops on shutdown
630
631* ([issue 1365]) Handler wrappers decay parameters sooner
632
633* ([issue 1408]) `session_alloc`
634  is thread-safe
635
636* ([issue 1414]) Boost.System is header-only
637
638* ([issue 1418]) `test::stream`
639  maintains a handler work guard
640
641* ([issue 1445]) Fix posix_file::close handling of EINTR
642
643* ([issue 1460]) Large WebSocket Upgrade response no longer overflows
644
645* Reusing an HTTP parser returns an error
646
647* Handler bind wrappers use the associated allocator
648
649* `buffers_cat`
650  correctly skips empty buffers when iterated
651
652* `ostream`
653  does not overflow or exceed the dynamic buffer's maximum size
654
655* Fixes to
656  `test::stream::async_read`
657
658* `file_mode::append_existing`
659  works correctly
660
661* A handler work guard is maintained on paused websocket operations
662
663* All behavior of default-constructed iterators is conforming
664
665[/-----------------------------------------------------------------------------]
666
667[heading Boost 1.69]
668
669[*New Videos]
670
671[block'''
672<mediaobject>
673  <videoobject>
674    <videodata fileref="https://www.youtube.com/embed/7FQwAjELMek"
675        align="center" contentwidth="448" contentdepth="252"/>
676  </videoobject>
677</mediaobject>
678''']
679
680[*New Features]
681
682* ([issue 1133]) Add `BOOST_BEAST_USE_STD_STRING_VIEW`
683
684[*Examples]
685
686* New WebSocket server and browser-based client: example/cppcon2018
687
688[*Fixes]
689
690* ([issue 1245]) Fix a rare case of incorrect UTF8 validation
691
692* ([issue 1237]) Verify certificates in client examples
693
694* ([issue 1233]) Use [@boost:/doc/html/core/empty_value.html `boost::empty_value`]
695
696* ([issue 1091]) Fix timer on websocket upgrade in examples
697
698* ([issue 1270]) [link beast.ref.boost__beast__http__basic_fields `basic_fields`] uses intrusive base hooks
699
700* ([issue 1267]) Fix parsing of out-of-bounds hex values
701
702* ([issue 1263]) Fix uninitialized comparison in buffers iterator
703
704* ([issue 1288]) Remove extraneous strand from example
705
706* Workaround for http-server-fast and libstdc++
707
708* Partial support for `BOOST_NO_EXCEPTIONS`
709
710[*Experimental]
711
712* Add `timeout_socket`
713
714
715
716
717[heading Boost 1.68]
718
719This version fixes a missing executor work guard in all composed operations
720used in the implementation. Users who are experiencing crashes related to
721asynchronous completion handlers are encouraged to upgrade. Also included
722is an improved mechanism for generating random numbers used to mask outgoing
723websocket frames when operating in the client mode. This resolves a
724vulnerability described in the Beast Hybrid Assessment Report from Bishop Fox.
725
726[*New Features]
727
728The include directory `<beast/experimental>` contains features which are not
729part of the stable public interface but are available anyway. They may change
730in future versions.
731
732* ([issue 1108]) New [link beast.ref.boost__beast__flat_stream `flat_stream`] for working around an SSL stream performance limitation
733
734* ([issue 1151], [issue 595]) New [link beast.ref.boost__beast__http__icy_stream `http::icy_stream`] stream filter allows parsing ICY HTTP response handshakes
735
736* New [link beast.ref.boost__beast__ssl_stream `ssl_stream`] for better SSL performance and move constructability
737
738* New
739  [link beast.ref.boost__beast__test__error `test::connect`],
740  [link beast.ref.boost__beast__test__error `test::error`],
741  [link beast.ref.boost__beast__test__error `test::fail_count`], and
742  [link beast.ref.boost__beast__test__error `test::stream`] utilities for writing unit tests.
743
744* New [link beast.ref.boost__beast__http__is_mutable_body_writer `http::is_mutable_body_writer`] metafunction
745
746* New [link beast.ref.boost__beast__websocket__seed_prng `websocket::seed_prng`] for manually providing entropy to the PRNG
747
748* New [link beast.ref.boost__beast__websocket__stream.secure_prng `websocket::stream::secure_prng`] to control whether the connection uses a secure PRNG
749
750[*Improvements]
751
752* Generated WebSocket masks use a secure PRNG by default
753
754* Improvements to [link beast.ref.boost__beast__buffers_adaptor `buffers_adaptor`]
755
756* ([issue 1188]) Set "/permissive-" for MSVC builds
757
758* ([issue 1109]) Use a shared string for example HTTP server doc roots
759
760* ([issue 1079]) Add `handler_ptr::has_value`
761
762[*Fixes]
763
764* ([issue 1073]) Fix race in advanced server examples
765
766* ([issue 1076]) Use executor_work_guard in composed operations
767
768* ([issue 1079]) Remove spurious assert
769
770* ([issue 1113]) Add `const` and non-`const` overloads for message based HTTP writes
771
772* ([issue 1119]) Fix unused variable warning
773
774* ([issue 1121]) Examples use the root certificate which matches the fingerprint
775
776* ([issue 1141]) Tidy up composed operation doc
777
778* ([issue 1186]) Check error in example set_option
779
780* ([issue 1210]) Fix http_server_stackless_ssl.cpp example
781
782* ([issue 1211]) Fix parse_dec algorithm
783
784* ([issue 1214]) Silence ubsan false positive
785
786* Tidy up websocket stream javadocs
787
788* Fix move-only arguments in [link beast.ref.boost__beast__bind_handler `bind_handler`]
789
790* Fix [link beast.ref.boost__beast__http__parser `http::parser`] constructor javadoc
791
792* Fix [link beast.ref.boost__beast__buffers_adaptor `buffers_adaptor`] iterator value type
793
794* Fix [link beast.ref.boost__beast__buffers_adaptor.max_size `buffers_adaptor::max_size`]
795
796* Fix [link beast.ref.boost__beast__buffers_prefix `buffers_prefix`] iterator decrement
797
798* Fix __Fields__, __FieldsWriter__ concept docs
799
800* Fix __BodyReader__ constructor requirements doc
801
802[*Breaking Changes]
803
804* Remove deprecated `serializer::reader_impl`
805
806* Remove deprecated __Body__ `reader` and `writer` ctor signatures
807
808
809
810
811
812[heading Boost 1.67]
813
814This version fixes significant defects in
815[link beast.ref.boost__beast__websocket__stream `websocket::stream`]
816which can lead to asserts or undefined behavior. Users are encouraged
817to update to the latest Boost release.
818
819[*New Features]
820
821* Move-only completion handlers are supported throughout the library
822
823* ([issue 899]) Advanced server examples support idle websocket pings and timeouts
824
825* ([issue 849]) WebSocket permessage-deflate support is now a compile-time
826  feature.  This adds an additional `bool` template parameter to
827  [link beast.ref.boost__beast__websocket__stream `websocket::stream`]
828  When `deflateSupported` is `true`, the stream will be capable of
829  negotiating the permessage-deflate websocket extension per the
830  configured run-time settings.
831  When `deflateSupported` is `false`, the stream will never negotiate
832  the permessage-deflate websocket extension. Furthermore, all of the
833  code necessary for implementing the permessage-deflate extension
834  will be excluded from function instantiations. Programs which set
835  `deflateSupported` to `false` when instantiating streams will be smaller.
836
837* ([issue 949]) WebSocket error codes are revised. New
838  [link beast.ref.boost__beast__websocket__error error codes]
839  are added for more fine-grained failure outcomes. Messages for error
840  codes are more verbose to help pinpoint the problem. Error codes are
841  now also mapped to newly added
842  [link beast.ref.boost__beast__websocket__condition error conditions]
843  to simplify comparisons. The error codes `websocket::error::failed`
844  and `websocket::error::handshake_failed` are removed.
845  Actions required:
846  Code which explicitly compares `error_code` values against
847  the constant `websocket::error::handshake_failed` should compare
848  against
849  [link beast.ref.boost__beast__websocket__condition `websocket::condition::handshake_failed`]
850  instead.
851  Code which explicitly compares error_code values against the
852  constant `websocket::error::failed` should compare
853  against
854  [link beast.ref.boost__beast__websocket__condition `websocket::condition::protocol_violation`]
855  instead.
856
857[*Improvements]
858
859* ([issue 857])
860  [link beast.ref.boost__beast__http__basic_fields `http::basic_fields`]
861  uses less storage
862
863* ([issue 894])
864  [link beast.ref.boost__beast__http__basic_fields `http::basic_fields`]
865  exception specifiers are provided
866
867* Implementation no longer uses deprecated `asio::null_buffers`
868
869* Add [include_file boost/beast/websocket/stream_fwd.hpp]
870
871* ([issue 955]) The asynchronous SSL detector example uses a stackless coroutine
872
873* [link beast.ref.boost__beast__bind_handler `bind_handler`]
874  works with boost placeholders
875
876* Examples set `reuse_address(true)`
877
878* ([issue 1026]) Advanced servers support clean shutdown via SIGINT or SIGTERM
879
880* Some basic_fields operations now give the strong exception guarantee
881
882[*Fixes]
883
884* Fix "warning: ‘const’ type qualifier on return type has no effect"
885
886* ([issue 916]) Tidy up `ssl_stream` special members
887
888* ([issue 918]) Calls to `<algorithm>` are protected from macros
889
890* ([issue 954]) The control callback is invoked on the proper executor
891
892* ([issue 994]) Fix iterator version of
893  [link beast.ref.boost__beast__http__basic_fields.erase.overload1 `http::basic_fields::erase`]
894
895* ([issue 992]) Fix use-after-move in example request handlers
896
897* ([issue 988]) Type check completion handlers
898
899* ([issue 985]) Tidy up
900  [link beast.ref.boost__beast__bind_handler `bind_handler`]
901  doc
902
903* Fix memory leak in advanced server examples
904
905* ([issue 1000]) Fix soft-mutex assert in websocket stream.
906  This resolves the assert `"ws_.wr_block_ == tok_"`.
907
908* ([issue 1019]) Fix fallthrough warnings
909
910* ([issue 1024]) Fix teardown for TIME_WAIT
911
912* ([issue 1030]) Fix big-endian websocket masking
913
914* Safe treatment of zero-length string arguments in basic_fields
915
916* ([issue 1043]) Examples clear the HTTP message before reading
917
918* ([issue 1012]) Add asio_handler_invoke overloads for stream algorithms
919
920* Add Access-Control-Expose-Headers field constant
921
922[*API Changes]
923
924* Remove unintended public members of
925  `handler_ptr`.
926  Actions required: don't call non-public members.
927
928* `handler_ptr`
929  is a move-only type, with `unique_ptr` semantics.
930  Actions required: user-defined composed operations using `handler_ptr`
931  to manage state can only be moved, not copied.
932
933* `handler_ptr`
934  gives the strong exception guarantee. The constructor signature
935  for managed objects constructed by `handler_ptr` now receives a
936  `const` reference to the handler. Actions required: Change the
937  constructor signature for state objects used with `handler_ptr`
938  to receive a `const` reference to the handler.
939
940* ([issue 896])
941  [link beast.ref.boost__beast__http__basic_fields `http::basic_fields`]
942  does not support fancy pointers
943
944* [link beast.ref.boost__beast__http__parser `http::parser`]
945  is no longer [*MoveConstructible]
946
947* ([issue 930]) `http::serializer::reader_impl` is deprecated and will
948  be removed in the next release. Actions required: Call
949  [link beast.ref.boost__beast__http__serializer.writer_impl `http::serializer::writer_impl`]
950  instead of `serializer::reader_impl`.
951
952* ([issue 884]) The __BodyReader__ and __BodyWriter__ concept constructor
953  requirements have changed. They now require the header and body
954  elements to be passed as distinct
955  [link beast.ref.boost__beast__http__header `http::header`]
956  and `value_type` objects. This enables the composition of body types.
957  The previous single-argument constructors are deprecated and will be
958  removed in the next version.
959  Actions required: Change user-defined instances of __BodyReader__ or
960  __BodyWriter__ constructor signatures to the two-argument form.
961  Alternatively. define the macro `BOOST_BEAST_ALLOW_DEPRECATED` in
962  the project (which will cause both the new and the deprecated
963  signatures to be accepted).
964
965* [link beast.ref.boost__beast__websocket__stream.control_callback `websocket::stream::control_callback`]
966  now copies or moves the function object.
967
968* ([issue 1014]) DynamicBuffer input areas are not mutable.
969  Actions required: do not attempt to write to input areas of dynamic
970  buffers.
971
972* ([issue 941]) `get_lowest_layer` is now a type alias.
973  Actions required: Replace instances of `typename get_lowest_layer<T>::type`
974  with `get_lowest_layer<T>`.
975
976[heading Boost 1.66]
977
978* Initial release
979
980[endsect]
981