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