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