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