mirror of
https://github.com/boostorg/beast.git
synced 2025-07-30 04:47:29 +02:00
role_type is in boost/beast/core/role.hpp (API Change):
This enumeration is now part of the library core and not specific to websocket.
This commit is contained in:
@ -1,6 +1,12 @@
|
|||||||
Version 221:
|
Version 221:
|
||||||
|
|
||||||
* Rename to async_base, stable_async_base
|
* Rename to async_base, stable_async_base
|
||||||
|
* role_type is in boost/beast/core/role.hpp (API Change)
|
||||||
|
|
||||||
|
Actions Required:
|
||||||
|
|
||||||
|
* Include <boost/beast/core/role.hpp> or
|
||||||
|
define BOOST_BEAST_ALLOW_DEPRECATED=1
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
Official repository: https://github.com/boostorg/beast
|
Official repository: https://github.com/boostorg/beast
|
||||||
]
|
]
|
||||||
|
|
||||||
[section Using HTTP]
|
[section:using_http HTTP]
|
||||||
|
|
||||||
[warning
|
[warning
|
||||||
Higher level functions such as Basic
|
Higher level functions such as Basic
|
@ -7,7 +7,7 @@
|
|||||||
Official repository: https://github.com/boostorg/beast
|
Official repository: https://github.com/boostorg/beast
|
||||||
]
|
]
|
||||||
|
|
||||||
[section More Examples]
|
[section:more_examples HTTP Examples]
|
||||||
|
|
||||||
These examples in this section are working functions that may be found
|
These examples in this section are working functions that may be found
|
||||||
in the examples directory. They demonstrate the usage of the library for
|
in the examples directory. They demonstrate the usage of the library for
|
@ -7,7 +7,7 @@
|
|||||||
Official repository: https://github.com/boostorg/beast
|
Official repository: https://github.com/boostorg/beast
|
||||||
]
|
]
|
||||||
|
|
||||||
[section Establishing Connections]
|
[section:establishing_connections Connecting]
|
||||||
|
|
||||||
Connections are established by invoking functions directly on the next layer
|
Connections are established by invoking functions directly on the next layer
|
||||||
object. For example, to make an outgoing connection using a standard TCP/IP
|
object. For example, to make an outgoing connection using a standard TCP/IP
|
@ -1,85 +0,0 @@
|
|||||||
[/
|
|
||||||
Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com)
|
|
||||||
|
|
||||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
|
||||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
|
|
||||||
Official repository: https://github.com/boostorg/beast
|
|
||||||
]
|
|
||||||
|
|
||||||
[section Creating Streams]
|
|
||||||
|
|
||||||
The interface to the WebSocket implementation is a single template class
|
|
||||||
[link beast.ref.boost__beast__websocket__stream `stream`]:
|
|
||||||
|
|
||||||
[ws_snippet_26]
|
|
||||||
|
|
||||||
An instance of the stream wraps an existing network transport object
|
|
||||||
or other type of octet oriented stream. The wrapped object is called
|
|
||||||
the "next layer" and must meet the requirements of __SyncStream__ if
|
|
||||||
synchronous operations are performed, __AsyncStream__ if asynchronous
|
|
||||||
operations are performed, or both. Any arguments supplied to the
|
|
||||||
constructor of the stream wrapper are forwarded to next layer's constructor.
|
|
||||||
|
|
||||||
The value of `deflateSupported` determines if the stream will support
|
|
||||||
(but not require) the permessage-deflate extension
|
|
||||||
([@https://tools.ietf.org/html/rfc7692 rfc7692])
|
|
||||||
negotiation during handshaking. This extension allows messages to be
|
|
||||||
optionally automatically compressed using the deflate algorithm prior
|
|
||||||
to transmission. When this boolean value is `false`, the extension is
|
|
||||||
disabled. Applications which do not intend to use the permessage-deflate
|
|
||||||
extension may set the value to `false` to enjoy a reduction in the size
|
|
||||||
of the compiled output, as the necessary compression code (included with
|
|
||||||
Beast) will not be compiled in.
|
|
||||||
|
|
||||||
Here we declare a websocket stream over a TCP/IP socket with ownership
|
|
||||||
of the socket. The `io_context` argument is forwarded to the wrapped
|
|
||||||
socket's constructor:
|
|
||||||
|
|
||||||
[ws_snippet_2]
|
|
||||||
|
|
||||||
[heading Using SSL]
|
|
||||||
|
|
||||||
To use WebSockets over SSL, use an instance of the __ssl_stream__
|
|
||||||
class template as the template type for the stream. The required
|
|
||||||
__io_context__ and __ssl_context__ arguments are forwarded to the
|
|
||||||
wrapped stream's constructor:
|
|
||||||
|
|
||||||
[wss_snippet_1]
|
|
||||||
[wss_snippet_2]
|
|
||||||
|
|
||||||
[important
|
|
||||||
Code which declares websocket stream objects using Asio SSL types
|
|
||||||
must include the file [include_file boost/beast/websocket/ssl.hpp].
|
|
||||||
]
|
|
||||||
|
|
||||||
[heading Non-owning References]
|
|
||||||
|
|
||||||
If a socket type supports move construction, a websocket stream may be
|
|
||||||
constructed around the already existing socket by invoking the move
|
|
||||||
constructor signature:
|
|
||||||
|
|
||||||
[ws_snippet_3]
|
|
||||||
|
|
||||||
Or, the wrapper can be constructed with a non-owning reference. In
|
|
||||||
this case, the caller is responsible for managing the lifetime of the
|
|
||||||
underlying socket being wrapped:
|
|
||||||
|
|
||||||
[ws_snippet_4]
|
|
||||||
|
|
||||||
Once the WebSocket stream wrapper is created, the wrapped object may be
|
|
||||||
accessed by calling
|
|
||||||
[link beast.ref.boost__beast__websocket__stream.next_layer.overload1 `stream::next_layer`]:
|
|
||||||
|
|
||||||
[ws_snippet_5]
|
|
||||||
|
|
||||||
[warning
|
|
||||||
Initiating operations on the next layer while websocket
|
|
||||||
operations are being performed may result in undefined behavior.
|
|
||||||
]
|
|
||||||
|
|
||||||
[heading Non-Blocking Mode]
|
|
||||||
|
|
||||||
Please note that websocket streams do not support non-blocking modes.
|
|
||||||
|
|
||||||
[endsect]
|
|
@ -1,42 +0,0 @@
|
|||||||
[/
|
|
||||||
Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com)
|
|
||||||
|
|
||||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
|
||||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
|
|
||||||
Official repository: https://github.com/boostorg/beast
|
|
||||||
]
|
|
||||||
|
|
||||||
[section Using WebSocket]
|
|
||||||
|
|
||||||
The WebSocket Protocol enables two-way communication between a client
|
|
||||||
running untrusted code in a controlled environment to a remote host that has
|
|
||||||
opted-in to communications from that code. The protocol consists of an opening
|
|
||||||
handshake followed by basic message framing, layered over TCP. The goal of
|
|
||||||
this technology is to provide a mechanism for browser-based applications
|
|
||||||
needing two-way communication with servers without relying on opening multiple
|
|
||||||
HTTP connections.
|
|
||||||
|
|
||||||
Beast provides developers with a robust WebSocket implementation built on
|
|
||||||
Boost.Asio with a consistent asynchronous model using a modern C++ approach.
|
|
||||||
|
|
||||||
[note
|
|
||||||
This documentation assumes familiarity with __Asio__ and
|
|
||||||
the protocol specification described in __rfc6455__.
|
|
||||||
Sample code and identifiers appearing in this section is written
|
|
||||||
as if these declarations are in effect:
|
|
||||||
|
|
||||||
[ws_snippet_1]
|
|
||||||
]
|
|
||||||
|
|
||||||
[include 01_streams.qbk]
|
|
||||||
[include 02_connect.qbk]
|
|
||||||
[include 03_client.qbk]
|
|
||||||
[include 04_server.qbk]
|
|
||||||
[include 05_decorator.qbk]
|
|
||||||
[include 06_messages.qbk]
|
|
||||||
[include 07_control.qbk]
|
|
||||||
[include 08_teardown.qbk]
|
|
||||||
[include 09_notes.qbk]
|
|
||||||
|
|
||||||
[endsect]
|
|
155
doc/qbk/06_websocket/_websocket.qbk
Normal file
155
doc/qbk/06_websocket/_websocket.qbk
Normal file
@ -0,0 +1,155 @@
|
|||||||
|
[/
|
||||||
|
Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com)
|
||||||
|
|
||||||
|
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||||
|
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
|
Official repository: https://github.com/boostorg/beast
|
||||||
|
]
|
||||||
|
|
||||||
|
[section:using_websocket WebSocket __new__]
|
||||||
|
|
||||||
|
[/-----------------------------------------------------------------------------]
|
||||||
|
|
||||||
|
The WebSocket Protocol enables two-way communication between a client running
|
||||||
|
untrusted code in a controlled environment to a remote host that has opted-in
|
||||||
|
to communications from that code. The protocol consists of an opening handshake
|
||||||
|
followed by basic message framing, layered over TCP. The goal of this
|
||||||
|
technology is to provide a mechanism for browser-based applications needing
|
||||||
|
two-way communication with servers without relying on opening multiple HTTP
|
||||||
|
connections.
|
||||||
|
|
||||||
|
Beast provides developers with a robust WebSocket implementation
|
||||||
|
built on Boost.Asio with a consistent asynchronous model using a modern C++
|
||||||
|
approach.
|
||||||
|
|
||||||
|
[note
|
||||||
|
This documentation assumes familiarity with __Asio__ and
|
||||||
|
the protocol specification described in __rfc6455__.
|
||||||
|
Sample code and identifiers appearing in this section is written
|
||||||
|
as if these declarations are in effect:
|
||||||
|
|
||||||
|
[code_websocket_1a]
|
||||||
|
'''<?linebreak?>'''
|
||||||
|
[code_websocket_1b]
|
||||||
|
]
|
||||||
|
|
||||||
|
[/-----------------------------------------------------------------------------]
|
||||||
|
|
||||||
|
[heading Construction]
|
||||||
|
|
||||||
|
A WebSocket connection requires a stateful object, represented in Beast by a
|
||||||
|
single class template
|
||||||
|
[link beast.ref.boost__beast__websocket__stream `websocket::stream`].
|
||||||
|
The interface uses the layered stream model. A websocket stream object contains
|
||||||
|
another stream object, called the "next layer", which it uses to perform I/O.
|
||||||
|
Descriptions of each template parameter follow:
|
||||||
|
|
||||||
|
[code_websocket_1h]
|
||||||
|
|
||||||
|
[table WebSocket Stream Template Parameters
|
||||||
|
[[Name][Description]]
|
||||||
|
[
|
||||||
|
[`NextLayer`]
|
||||||
|
[
|
||||||
|
The type of the next layer. An object of this type will be constructed
|
||||||
|
and maintained for the lifetime of the stream. All reads and writes
|
||||||
|
will go through the next layer. This type must meet the requirements
|
||||||
|
of either __SyncStream__, __AsyncStream__, or both, depending on the
|
||||||
|
style of I/O that is to be performed.
|
||||||
|
]
|
||||||
|
][
|
||||||
|
[`deflateSupported`]
|
||||||
|
[
|
||||||
|
When this value is `true`, the stream will support (but not require)
|
||||||
|
the [@https://tools.ietf.org/html/rfc7692 permessage-deflate extension].
|
||||||
|
Whether or not the stream actually requests or accepts the extension
|
||||||
|
during a handshake depends on a separate configurable option.
|
||||||
|
|
||||||
|
When the value is `false` the extension is disabled. Streams will
|
||||||
|
never request the extension in the client role or accept a request
|
||||||
|
for the extension in the server role. An additional benefit of
|
||||||
|
disabling the extension is that compilation will be faster, and
|
||||||
|
the resulting program executable will contain less code.
|
||||||
|
]
|
||||||
|
]]
|
||||||
|
|
||||||
|
When a stream is constructed, any arguments provided to the constructor are
|
||||||
|
forwarded to the next layer object's constructor. This declares a stream
|
||||||
|
over a plain TCP/IP socket using an I/O context:
|
||||||
|
|
||||||
|
[code_websocket_1f]
|
||||||
|
|
||||||
|
[tip
|
||||||
|
Websocket streams use their own protocol-specific timeout feature. When
|
||||||
|
using a websocket stream with the
|
||||||
|
[link beast.ref.boost__beast__tcp_stream `tcp_stream`] or
|
||||||
|
[link beast.ref.boost__beast__basic_stream `basic_stream`]
|
||||||
|
class template, timeouts should be disabled on the TCP or basic stream
|
||||||
|
after the connection is established, otherwise the behavior of the
|
||||||
|
stream is undefined.
|
||||||
|
]
|
||||||
|
|
||||||
|
As with most I/O objects, a websocket stream is [*not thread-safe]. Undefined
|
||||||
|
behavior results if two different threads access the object concurrently.
|
||||||
|
For multi-threaded programs, the `tcp_stream` can be constructed from an
|
||||||
|
executor, in this case a strand. The stream declared below will use a
|
||||||
|
strand to invoke all completion handlers:
|
||||||
|
|
||||||
|
[code_websocket_2f]
|
||||||
|
|
||||||
|
[heading Using SSL]
|
||||||
|
|
||||||
|
To use WebSockets over SSL, use an instance of the __ssl_stream__
|
||||||
|
class template as the template type for the stream. The required
|
||||||
|
__io_context__ and __ssl_context__ arguments are forwarded to the
|
||||||
|
wrapped stream's constructor:
|
||||||
|
|
||||||
|
[code_websocket_3f]
|
||||||
|
|
||||||
|
[important
|
||||||
|
Code which declares websocket stream objects using Asio SSL types
|
||||||
|
must include the file [include_file boost/beast/websocket/ssl.hpp].
|
||||||
|
]
|
||||||
|
|
||||||
|
[heading Non-owning References]
|
||||||
|
|
||||||
|
If a socket type supports move construction, a websocket stream may be
|
||||||
|
constructed around the already existing socket by invoking the move
|
||||||
|
constructor signature:
|
||||||
|
|
||||||
|
[ws_snippet_3]
|
||||||
|
|
||||||
|
Or, the wrapper can be constructed with a non-owning reference. In
|
||||||
|
this case, the caller is responsible for managing the lifetime of the
|
||||||
|
underlying socket being wrapped:
|
||||||
|
|
||||||
|
[ws_snippet_4]
|
||||||
|
|
||||||
|
Once the WebSocket stream wrapper is created, the wrapped object may be
|
||||||
|
accessed by calling
|
||||||
|
[link beast.ref.boost__beast__websocket__stream.next_layer.overload1 `stream::next_layer`]:
|
||||||
|
|
||||||
|
[ws_snippet_5]
|
||||||
|
|
||||||
|
[warning
|
||||||
|
Initiating operations on the next layer while websocket
|
||||||
|
operations are being performed may result in undefined behavior.
|
||||||
|
]
|
||||||
|
|
||||||
|
[heading Non-Blocking Mode]
|
||||||
|
|
||||||
|
Please note that websocket streams do not support non-blocking modes.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[include 01_connecting.qbk]
|
||||||
|
[include 03_client.qbk]
|
||||||
|
[include 04_server.qbk]
|
||||||
|
[include 05_decorator.qbk]
|
||||||
|
[include 06_messages.qbk]
|
||||||
|
[include 07_control.qbk]
|
||||||
|
[include 08_teardown.qbk]
|
||||||
|
[include 09_notes.qbk]
|
||||||
|
|
||||||
|
[endsect]
|
@ -64,7 +64,7 @@
|
|||||||
[def __AsyncWriteStream__ [@boost:/doc/html/boost_asio/reference/AsyncWriteStream.html ['AsyncWriteStream]]]
|
[def __AsyncWriteStream__ [@boost:/doc/html/boost_asio/reference/AsyncWriteStream.html ['AsyncWriteStream]]]
|
||||||
[def __CompletionCondition__ [@boost:/doc/html/boost_asio/reference/CompletionCondition.html ['CompletionCondition]]]
|
[def __CompletionCondition__ [@boost:/doc/html/boost_asio/reference/CompletionCondition.html ['CompletionCondition]]]
|
||||||
[def __CompletionHandler__ [@boost:/doc/html/boost_asio/reference/CompletionHandler.html ['CompletionHandler]]]
|
[def __CompletionHandler__ [@boost:/doc/html/boost_asio/reference/CompletionHandler.html ['CompletionHandler]]]
|
||||||
[def __CompletionToken__ [@boost:/doc/html/boost_asio/reference/asynchronous_operations#boost_asio.reference.asynchronous_operations.completion_tokens_and_handlers ['CompletionToken]]]
|
[def __CompletionToken__ [@boost:/doc/html/boost_asio/reference/asynchronous_operations.html#boost_asio.reference.asynchronous_operations.completion_tokens_and_handlers ['CompletionToken]]]
|
||||||
[def __ConnectCondition__ [@boost:/doc/html/boost_asio/reference/ConnectCondition.html ['ConnectCondition]]]
|
[def __ConnectCondition__ [@boost:/doc/html/boost_asio/reference/ConnectCondition.html ['ConnectCondition]]]
|
||||||
[def __ConnectHandler__ [@boost:/doc/html/boost_asio/reference/ConnectHandler.html ['ConnectHandler]]]
|
[def __ConnectHandler__ [@boost:/doc/html/boost_asio/reference/ConnectHandler.html ['ConnectHandler]]]
|
||||||
[def __ConstBufferSequence__ [@boost:/doc/html/boost_asio/reference/ConstBufferSequence.html ['ConstBufferSequence]]]
|
[def __ConstBufferSequence__ [@boost:/doc/html/boost_asio/reference/ConstBufferSequence.html ['ConstBufferSequence]]]
|
||||||
@ -133,6 +133,7 @@
|
|||||||
[import ../../example/websocket/client/sync/websocket_client_sync.cpp]
|
[import ../../example/websocket/client/sync/websocket_client_sync.cpp]
|
||||||
|
|
||||||
[import ../../include/boost/beast/http/basic_file_body.hpp]
|
[import ../../include/boost/beast/http/basic_file_body.hpp]
|
||||||
|
[import ../../include/boost/beast/websocket/stream_fwd.hpp]
|
||||||
|
|
||||||
[import ../../test/doc/exemplars.cpp]
|
[import ../../test/doc/exemplars.cpp]
|
||||||
[import ../../test/doc/core_snippets.cpp]
|
[import ../../test/doc/core_snippets.cpp]
|
||||||
@ -143,6 +144,7 @@
|
|||||||
[import ../../test/doc/core_3_timeouts.cpp]
|
[import ../../test/doc/core_3_timeouts.cpp]
|
||||||
[import ../../test/doc/core_4_layers.cpp]
|
[import ../../test/doc/core_4_layers.cpp]
|
||||||
[import ../../test/doc/http_10_custom_parser.cpp]
|
[import ../../test/doc/http_10_custom_parser.cpp]
|
||||||
|
[import ../../test/doc/websocket.cpp]
|
||||||
[import ../../test/doc/websocket_3_handshake.cpp]
|
[import ../../test/doc/websocket_3_handshake.cpp]
|
||||||
|
|
||||||
[import ../../include/boost/beast/core/detect_ssl.hpp]
|
[import ../../include/boost/beast/core/detect_ssl.hpp]
|
||||||
@ -171,11 +173,11 @@ __new__ indicates an item that is new in this version.
|
|||||||
[include 01_intro/_intro.qbk]
|
[include 01_intro/_intro.qbk]
|
||||||
[include 02_examples/_examples.qbk]
|
[include 02_examples/_examples.qbk]
|
||||||
[include 03_core/_core.qbk]
|
[include 03_core/_core.qbk]
|
||||||
[include 04_http/0_http.qbk]
|
[include 04_http/_http.qbk]
|
||||||
[include 05_http_examples/0_http_examples.qbk]
|
[include 05_http_examples/_http_examples.qbk]
|
||||||
[include 06_websocket/0_websocket.qbk]
|
[include 06_websocket/_websocket.qbk]
|
||||||
[include 07_concepts/0_concepts.qbk]
|
[include 07_concepts/_concepts.qbk]
|
||||||
[include 08_design/0_design.qbk]
|
[include 08_design/_design.qbk]
|
||||||
|
|
||||||
[section:moved1 Release Notes (Moved)]
|
[section:moved1 Release Notes (Moved)]
|
||||||
The Release Notes have been moved to the top of the table of contents.
|
The Release Notes have been moved to the top of the table of contents.
|
||||||
|
@ -58,6 +58,7 @@
|
|||||||
<member><link linkend="beast.ref.boost__beast__condition">condition</link> <emphasis role="green">★</emphasis></member>
|
<member><link linkend="beast.ref.boost__beast__condition">condition</link> <emphasis role="green">★</emphasis></member>
|
||||||
<member><link linkend="beast.ref.boost__beast__error">error</link> <emphasis role="green">★</emphasis></member>
|
<member><link linkend="beast.ref.boost__beast__error">error</link> <emphasis role="green">★</emphasis></member>
|
||||||
<member><link linkend="beast.ref.boost__beast__file_mode">file_mode</link></member>
|
<member><link linkend="beast.ref.boost__beast__file_mode">file_mode</link></member>
|
||||||
|
<member><link linkend="beast.ref.boost__beast__role_type">role_type</link> <emphasis role="green">★</emphasis></member>
|
||||||
</simplelist>
|
</simplelist>
|
||||||
</entry>
|
</entry>
|
||||||
<entry valign="top">
|
<entry valign="top">
|
||||||
@ -312,7 +313,6 @@
|
|||||||
<member><link linkend="beast.ref.boost__beast__websocket__condition">condition</link></member>
|
<member><link linkend="beast.ref.boost__beast__websocket__condition">condition</link></member>
|
||||||
<member><link linkend="beast.ref.boost__beast__websocket__error">error</link></member>
|
<member><link linkend="beast.ref.boost__beast__websocket__error">error</link></member>
|
||||||
<member><link linkend="beast.ref.boost__beast__websocket__frame_type">frame_type</link></member>
|
<member><link linkend="beast.ref.boost__beast__websocket__frame_type">frame_type</link></member>
|
||||||
<member><link linkend="beast.ref.boost__beast__websocket__role_type">role_type</link></member>
|
|
||||||
</simplelist>
|
</simplelist>
|
||||||
</entry>
|
</entry>
|
||||||
</row></tbody>
|
</row></tbody>
|
||||||
|
@ -261,6 +261,8 @@
|
|||||||
`file_mode::append_existing`
|
`file_mode::append_existing`
|
||||||
as needed.
|
as needed.
|
||||||
|
|
||||||
|
* `role_type` is moved from `websocket` to `beast`
|
||||||
|
|
||||||
* `buffers_range_ref`
|
* `buffers_range_ref`
|
||||||
is preferred to `std::reference_wrapper`.
|
is preferred to `std::reference_wrapper`.
|
||||||
['Actions Required]:
|
['Actions Required]:
|
||||||
|
107
doc/source.dox
107
doc/source.dox
@ -8,7 +8,7 @@ PROJECT_BRIEF = C++ Networking Library
|
|||||||
PROJECT_LOGO =
|
PROJECT_LOGO =
|
||||||
OUTPUT_DIRECTORY =
|
OUTPUT_DIRECTORY =
|
||||||
CREATE_SUBDIRS = NO
|
CREATE_SUBDIRS = NO
|
||||||
ALLOW_UNICODE_NAMES = NO
|
#####ALLOW_UNICODE_NAMES = NO
|
||||||
OUTPUT_LANGUAGE = English
|
OUTPUT_LANGUAGE = English
|
||||||
BRIEF_MEMBER_DESC = YES
|
BRIEF_MEMBER_DESC = YES
|
||||||
REPEAT_BRIEF = YES
|
REPEAT_BRIEF = YES
|
||||||
@ -39,7 +39,7 @@ CPP_CLI_SUPPORT = NO
|
|||||||
SIP_SUPPORT = NO
|
SIP_SUPPORT = NO
|
||||||
IDL_PROPERTY_SUPPORT = YES
|
IDL_PROPERTY_SUPPORT = YES
|
||||||
DISTRIBUTE_GROUP_DOC = YES
|
DISTRIBUTE_GROUP_DOC = YES
|
||||||
GROUP_NESTED_COMPOUNDS = NO
|
#####GROUP_NESTED_COMPOUNDS = NO
|
||||||
SUBGROUPING = YES
|
SUBGROUPING = YES
|
||||||
INLINE_GROUPED_CLASSES = NO
|
INLINE_GROUPED_CLASSES = NO
|
||||||
INLINE_SIMPLE_STRUCTS = NO
|
INLINE_SIMPLE_STRUCTS = NO
|
||||||
@ -63,7 +63,7 @@ HIDE_IN_BODY_DOCS = NO
|
|||||||
INTERNAL_DOCS = NO
|
INTERNAL_DOCS = NO
|
||||||
CASE_SENSE_NAMES = YES
|
CASE_SENSE_NAMES = YES
|
||||||
HIDE_SCOPE_NAMES = NO
|
HIDE_SCOPE_NAMES = NO
|
||||||
HIDE_COMPOUND_REFERENCE= NO
|
#####HIDE_COMPOUND_REFERENCE= NO
|
||||||
SHOW_INCLUDE_FILES = NO
|
SHOW_INCLUDE_FILES = NO
|
||||||
SHOW_GROUPED_MEMB_INC = NO
|
SHOW_GROUPED_MEMB_INC = NO
|
||||||
FORCE_LOCAL_INCLUDES = NO
|
FORCE_LOCAL_INCLUDES = NO
|
||||||
@ -95,7 +95,7 @@ WARNINGS = YES
|
|||||||
WARN_IF_UNDOCUMENTED = YES
|
WARN_IF_UNDOCUMENTED = YES
|
||||||
WARN_IF_DOC_ERROR = YES
|
WARN_IF_DOC_ERROR = YES
|
||||||
WARN_NO_PARAMDOC = NO
|
WARN_NO_PARAMDOC = NO
|
||||||
WARN_AS_ERROR = NO
|
#####WARN_AS_ERROR = NO
|
||||||
WARN_FORMAT = "$file:$line: $text"
|
WARN_FORMAT = "$file:$line: $text"
|
||||||
WARN_LOGFILE =
|
WARN_LOGFILE =
|
||||||
|
|
||||||
@ -112,6 +112,7 @@ INPUT = \
|
|||||||
$(LIB_DIR)/include/boost/beast/websocket \
|
$(LIB_DIR)/include/boost/beast/websocket \
|
||||||
$(LIB_DIR)/include/boost/beast/zlib
|
$(LIB_DIR)/include/boost/beast/zlib
|
||||||
|
|
||||||
|
|
||||||
INPUT_ENCODING = UTF-8
|
INPUT_ENCODING = UTF-8
|
||||||
FILE_PATTERNS =
|
FILE_PATTERNS =
|
||||||
RECURSIVE = NO
|
RECURSIVE = NO
|
||||||
@ -210,47 +211,14 @@ SEARCHDATA_FILE = searchdata.xml
|
|||||||
EXTERNAL_SEARCH_ID =
|
EXTERNAL_SEARCH_ID =
|
||||||
EXTRA_SEARCH_MAPPINGS =
|
EXTRA_SEARCH_MAPPINGS =
|
||||||
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# Configuration options related to the LaTeX output
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
GENERATE_LATEX = NO
|
GENERATE_LATEX = NO
|
||||||
LATEX_OUTPUT = latex
|
|
||||||
LATEX_CMD_NAME = latex
|
|
||||||
MAKEINDEX_CMD_NAME = makeindex
|
|
||||||
COMPACT_LATEX = NO
|
|
||||||
PAPER_TYPE = a4
|
|
||||||
EXTRA_PACKAGES =
|
|
||||||
LATEX_HEADER =
|
|
||||||
LATEX_FOOTER =
|
|
||||||
LATEX_EXTRA_STYLESHEET =
|
|
||||||
LATEX_EXTRA_FILES =
|
|
||||||
PDF_HYPERLINKS = YES
|
|
||||||
USE_PDFLATEX = YES
|
|
||||||
LATEX_BATCHMODE = NO
|
|
||||||
LATEX_HIDE_INDICES = NO
|
|
||||||
LATEX_SOURCE_CODE = NO
|
|
||||||
LATEX_BIB_STYLE = plain
|
|
||||||
LATEX_TIMESTAMP = NO
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# Configuration options related to the RTF output
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
GENERATE_RTF = NO
|
GENERATE_RTF = NO
|
||||||
RTF_OUTPUT = rtf
|
|
||||||
COMPACT_RTF = NO
|
|
||||||
RTF_HYPERLINKS = NO
|
|
||||||
RTF_STYLESHEET_FILE =
|
|
||||||
RTF_EXTENSIONS_FILE =
|
|
||||||
RTF_SOURCE_CODE = NO
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# Configuration options related to the man page output
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
GENERATE_MAN = NO
|
GENERATE_MAN = NO
|
||||||
MAN_OUTPUT = man
|
GENERATE_DOCBOOK = NO
|
||||||
MAN_EXTENSION = .3
|
GENERATE_AUTOGEN_DEF = NO
|
||||||
MAN_SUBDIR =
|
GENERATE_PERLMOD = NO
|
||||||
MAN_LINKS = NO
|
CLASS_DIAGRAMS = NO
|
||||||
|
HAVE_DOT = NO
|
||||||
|
|
||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
# Configuration options related to the XML output
|
# Configuration options related to the XML output
|
||||||
@ -259,22 +227,6 @@ GENERATE_XML = YES
|
|||||||
XML_OUTPUT = $(XML_OUTPUT)
|
XML_OUTPUT = $(XML_OUTPUT)
|
||||||
XML_PROGRAMLISTING = YES
|
XML_PROGRAMLISTING = YES
|
||||||
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# Configuration options related to the DOCBOOK output
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
GENERATE_DOCBOOK = NO
|
|
||||||
DOCBOOK_OUTPUT = docbook
|
|
||||||
DOCBOOK_PROGRAMLISTING = NO
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# Configuration options for the AutoGen Definitions output
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
GENERATE_AUTOGEN_DEF = NO
|
|
||||||
GENERATE_PERLMOD = NO
|
|
||||||
PERLMOD_LATEX = NO
|
|
||||||
PERLMOD_PRETTY = YES
|
|
||||||
PERLMOD_MAKEVAR_PREFIX =
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
# Configuration options related to the preprocessor
|
# Configuration options related to the preprocessor
|
||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
@ -305,42 +257,3 @@ ALLEXTERNALS = NO
|
|||||||
EXTERNAL_GROUPS = YES
|
EXTERNAL_GROUPS = YES
|
||||||
EXTERNAL_PAGES = YES
|
EXTERNAL_PAGES = YES
|
||||||
PERL_PATH = /usr/bin/perl
|
PERL_PATH = /usr/bin/perl
|
||||||
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# Configuration options related to the dot tool
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
CLASS_DIAGRAMS = NO
|
|
||||||
MSCGEN_PATH =
|
|
||||||
DIA_PATH =
|
|
||||||
HIDE_UNDOC_RELATIONS = YES
|
|
||||||
HAVE_DOT = NO
|
|
||||||
DOT_NUM_THREADS = 0
|
|
||||||
DOT_FONTNAME = Helvetica
|
|
||||||
DOT_FONTSIZE = 10
|
|
||||||
DOT_FONTPATH =
|
|
||||||
CLASS_GRAPH = YES
|
|
||||||
COLLABORATION_GRAPH = YES
|
|
||||||
GROUP_GRAPHS = YES
|
|
||||||
UML_LOOK = NO
|
|
||||||
UML_LIMIT_NUM_FIELDS = 10
|
|
||||||
TEMPLATE_RELATIONS = NO
|
|
||||||
INCLUDE_GRAPH = YES
|
|
||||||
INCLUDED_BY_GRAPH = YES
|
|
||||||
CALL_GRAPH = NO
|
|
||||||
CALLER_GRAPH = NO
|
|
||||||
GRAPHICAL_HIERARCHY = YES
|
|
||||||
DIRECTORY_GRAPH = YES
|
|
||||||
DOT_IMAGE_FORMAT = png
|
|
||||||
INTERACTIVE_SVG = NO
|
|
||||||
DOT_PATH =
|
|
||||||
DOTFILE_DIRS =
|
|
||||||
MSCFILE_DIRS =
|
|
||||||
DIAFILE_DIRS =
|
|
||||||
PLANTUML_JAR_PATH =
|
|
||||||
PLANTUML_INCLUDE_PATH =
|
|
||||||
DOT_GRAPH_MAX_NODES = 50
|
|
||||||
MAX_DOT_GRAPH_DEPTH = 0
|
|
||||||
DOT_TRANSPARENT = NO
|
|
||||||
DOT_MULTI_TARGETS = NO
|
|
||||||
GENERATE_LEGEND = YES
|
|
||||||
DOT_CLEANUP = YES
|
|
||||||
|
@ -268,7 +268,7 @@ public:
|
|||||||
// Set suggested timeout settings for the websocket
|
// Set suggested timeout settings for the websocket
|
||||||
derived().ws().set_option(
|
derived().ws().set_option(
|
||||||
websocket::stream_base::suggested_settings(
|
websocket::stream_base::suggested_settings(
|
||||||
websocket::role_type::server));
|
beast::role_type::server));
|
||||||
|
|
||||||
// Set a decorator to change the Server of the handshake
|
// Set a decorator to change the Server of the handshake
|
||||||
derived().ws().set_option(
|
derived().ws().set_option(
|
||||||
|
@ -238,7 +238,7 @@ public:
|
|||||||
// Set suggested timeout settings for the websocket
|
// Set suggested timeout settings for the websocket
|
||||||
ws_.set_option(
|
ws_.set_option(
|
||||||
websocket::stream_base::suggested_settings(
|
websocket::stream_base::suggested_settings(
|
||||||
websocket::role_type::server));
|
beast::role_type::server));
|
||||||
|
|
||||||
// Set a decorator to change the Server of the handshake
|
// Set a decorator to change the Server of the handshake
|
||||||
ws_.set_option(websocket::stream_base::decorator(
|
ws_.set_option(websocket::stream_base::decorator(
|
||||||
|
@ -129,7 +129,7 @@ public:
|
|||||||
// Set suggested timeout settings for the websocket
|
// Set suggested timeout settings for the websocket
|
||||||
ws_.set_option(
|
ws_.set_option(
|
||||||
websocket::stream_base::suggested_settings(
|
websocket::stream_base::suggested_settings(
|
||||||
websocket::role_type::client));
|
beast::role_type::client));
|
||||||
|
|
||||||
// Set a decorator to change the User-Agent of the handshake
|
// Set a decorator to change the User-Agent of the handshake
|
||||||
ws_.set_option(websocket::stream_base::decorator(
|
ws_.set_option(websocket::stream_base::decorator(
|
||||||
|
@ -106,7 +106,7 @@ public:
|
|||||||
// Set suggested timeout settings for the websocket
|
// Set suggested timeout settings for the websocket
|
||||||
ws_.set_option(
|
ws_.set_option(
|
||||||
websocket::stream_base::suggested_settings(
|
websocket::stream_base::suggested_settings(
|
||||||
websocket::role_type::client));
|
beast::role_type::client));
|
||||||
|
|
||||||
// Set a decorator to change the User-Agent of the handshake
|
// Set a decorator to change the User-Agent of the handshake
|
||||||
ws_.set_option(websocket::stream_base::decorator(
|
ws_.set_option(websocket::stream_base::decorator(
|
||||||
|
@ -95,7 +95,7 @@ do_session(
|
|||||||
// Set suggested timeout settings for the websocket
|
// Set suggested timeout settings for the websocket
|
||||||
ws.set_option(
|
ws.set_option(
|
||||||
websocket::stream_base::suggested_settings(
|
websocket::stream_base::suggested_settings(
|
||||||
websocket::role_type::client));
|
beast::role_type::client));
|
||||||
|
|
||||||
// Perform the websocket handshake
|
// Perform the websocket handshake
|
||||||
ws.async_handshake(host, "/", yield[ec]);
|
ws.async_handshake(host, "/", yield[ec]);
|
||||||
|
@ -71,7 +71,7 @@ do_session(
|
|||||||
// Set suggested timeout settings for the websocket
|
// Set suggested timeout settings for the websocket
|
||||||
ws.set_option(
|
ws.set_option(
|
||||||
websocket::stream_base::suggested_settings(
|
websocket::stream_base::suggested_settings(
|
||||||
websocket::role_type::client));
|
beast::role_type::client));
|
||||||
|
|
||||||
// Set a decorator to change the User-Agent of the handshake
|
// Set a decorator to change the User-Agent of the handshake
|
||||||
ws.set_option(websocket::stream_base::decorator(
|
ws.set_option(websocket::stream_base::decorator(
|
||||||
|
@ -87,7 +87,7 @@ public:
|
|||||||
// Set suggested timeout settings for the websocket
|
// Set suggested timeout settings for the websocket
|
||||||
ws_.set_option(
|
ws_.set_option(
|
||||||
websocket::stream_base::suggested_settings(
|
websocket::stream_base::suggested_settings(
|
||||||
websocket::role_type::server));
|
beast::role_type::server));
|
||||||
|
|
||||||
// Set a decorator to change the Server of the handshake
|
// Set a decorator to change the Server of the handshake
|
||||||
ws_.set_option(websocket::stream_base::decorator(
|
ws_.set_option(websocket::stream_base::decorator(
|
||||||
|
@ -61,7 +61,7 @@ public:
|
|||||||
// Set suggested timeout settings for the websocket
|
// Set suggested timeout settings for the websocket
|
||||||
ws_.set_option(
|
ws_.set_option(
|
||||||
websocket::stream_base::suggested_settings(
|
websocket::stream_base::suggested_settings(
|
||||||
websocket::role_type::server));
|
beast::role_type::server));
|
||||||
|
|
||||||
// Set a decorator to change the Server of the handshake
|
// Set a decorator to change the Server of the handshake
|
||||||
ws_.set_option(websocket::stream_base::decorator(
|
ws_.set_option(websocket::stream_base::decorator(
|
||||||
|
@ -64,7 +64,7 @@ run(http::request<Body, http::basic_fields<Allocator>> req)
|
|||||||
// Set suggested timeout settings for the websocket
|
// Set suggested timeout settings for the websocket
|
||||||
ws_.set_option(
|
ws_.set_option(
|
||||||
websocket::stream_base::suggested_settings(
|
websocket::stream_base::suggested_settings(
|
||||||
websocket::role_type::server));
|
beast::role_type::server));
|
||||||
|
|
||||||
// Set a decorator to change the Server of the handshake
|
// Set a decorator to change the Server of the handshake
|
||||||
ws_.set_option(websocket::stream_base::decorator(
|
ws_.set_option(websocket::stream_base::decorator(
|
||||||
|
@ -69,7 +69,7 @@ do_session(
|
|||||||
// Set suggested timeout settings for the websocket
|
// Set suggested timeout settings for the websocket
|
||||||
ws.set_option(
|
ws.set_option(
|
||||||
websocket::stream_base::suggested_settings(
|
websocket::stream_base::suggested_settings(
|
||||||
websocket::role_type::server));
|
beast::role_type::server));
|
||||||
|
|
||||||
// Set a decorator to change the Server of the handshake
|
// Set a decorator to change the Server of the handshake
|
||||||
ws.set_option(websocket::stream_base::decorator(
|
ws.set_option(websocket::stream_base::decorator(
|
||||||
|
@ -51,7 +51,7 @@ do_session(
|
|||||||
// Set suggested timeout settings for the websocket
|
// Set suggested timeout settings for the websocket
|
||||||
ws.set_option(
|
ws.set_option(
|
||||||
websocket::stream_base::suggested_settings(
|
websocket::stream_base::suggested_settings(
|
||||||
websocket::role_type::server));
|
beast::role_type::server));
|
||||||
|
|
||||||
// Set a decorator to change the Server of the handshake
|
// Set a decorator to change the Server of the handshake
|
||||||
ws.set_option(websocket::stream_base::decorator(
|
ws.set_option(websocket::stream_base::decorator(
|
||||||
|
@ -159,7 +159,7 @@ public:
|
|||||||
// Set suggested timeout settings for the websocket
|
// Set suggested timeout settings for the websocket
|
||||||
ws_.set_option(
|
ws_.set_option(
|
||||||
websocket::stream_base::suggested_settings(
|
websocket::stream_base::suggested_settings(
|
||||||
websocket::role_type::server));
|
beast::role_type::server));
|
||||||
|
|
||||||
// Set a decorator to change the Server of the handshake
|
// Set a decorator to change the Server of the handshake
|
||||||
ws_.set_option(websocket::stream_base::decorator(
|
ws_.set_option(websocket::stream_base::decorator(
|
||||||
@ -339,7 +339,7 @@ do_coro_session(
|
|||||||
// Set suggested timeout settings for the websocket
|
// Set suggested timeout settings for the websocket
|
||||||
ws.set_option(
|
ws.set_option(
|
||||||
websocket::stream_base::suggested_settings(
|
websocket::stream_base::suggested_settings(
|
||||||
websocket::role_type::server));
|
beast::role_type::server));
|
||||||
|
|
||||||
// Set a decorator to change the Server of the handshake
|
// Set a decorator to change the Server of the handshake
|
||||||
ws.set_option(websocket::stream_base::decorator(
|
ws.set_option(websocket::stream_base::decorator(
|
||||||
|
@ -99,7 +99,7 @@ public:
|
|||||||
// Set suggested timeout settings for the websocket
|
// Set suggested timeout settings for the websocket
|
||||||
ws_.set_option(
|
ws_.set_option(
|
||||||
websocket::stream_base::suggested_settings(
|
websocket::stream_base::suggested_settings(
|
||||||
websocket::role_type::server));
|
beast::role_type::server));
|
||||||
|
|
||||||
// Set a decorator to change the Server of the handshake
|
// Set a decorator to change the Server of the handshake
|
||||||
ws_.set_option(websocket::stream_base::decorator(
|
ws_.set_option(websocket::stream_base::decorator(
|
||||||
|
@ -76,7 +76,7 @@ public:
|
|||||||
// Set suggested timeout settings for the websocket
|
// Set suggested timeout settings for the websocket
|
||||||
ws_.set_option(
|
ws_.set_option(
|
||||||
websocket::stream_base::suggested_settings(
|
websocket::stream_base::suggested_settings(
|
||||||
websocket::role_type::server));
|
beast::role_type::server));
|
||||||
|
|
||||||
// Set a decorator to change the Server of the handshake
|
// Set a decorator to change the Server of the handshake
|
||||||
ws_.set_option(websocket::stream_base::decorator(
|
ws_.set_option(websocket::stream_base::decorator(
|
||||||
|
@ -392,7 +392,7 @@ async_write_some(
|
|||||||
template<class TeardownHandler>
|
template<class TeardownHandler>
|
||||||
void
|
void
|
||||||
async_teardown(
|
async_teardown(
|
||||||
websocket::role_type,
|
role_type,
|
||||||
stream& s,
|
stream& s,
|
||||||
TeardownHandler&& handler)
|
TeardownHandler&& handler)
|
||||||
{
|
{
|
||||||
|
@ -255,7 +255,7 @@ close_remote()
|
|||||||
|
|
||||||
void
|
void
|
||||||
teardown(
|
teardown(
|
||||||
websocket::role_type,
|
role_type,
|
||||||
stream& s,
|
stream& s,
|
||||||
boost::system::error_code& ec)
|
boost::system::error_code& ec)
|
||||||
{
|
{
|
||||||
|
@ -13,8 +13,8 @@
|
|||||||
#include <boost/beast/core/detail/config.hpp>
|
#include <boost/beast/core/detail/config.hpp>
|
||||||
#include <boost/beast/core/bind_handler.hpp>
|
#include <boost/beast/core/bind_handler.hpp>
|
||||||
#include <boost/beast/core/flat_buffer.hpp>
|
#include <boost/beast/core/flat_buffer.hpp>
|
||||||
|
#include <boost/beast/core/role.hpp>
|
||||||
#include <boost/beast/core/string.hpp>
|
#include <boost/beast/core/string.hpp>
|
||||||
#include <boost/beast/websocket/role.hpp>
|
|
||||||
#include <boost/beast/_experimental/test/fail_count.hpp>
|
#include <boost/beast/_experimental/test/fail_count.hpp>
|
||||||
#include <boost/asio/async_result.hpp>
|
#include <boost/asio/async_result.hpp>
|
||||||
#include <boost/asio/buffer.hpp>
|
#include <boost/asio/buffer.hpp>
|
||||||
@ -494,7 +494,7 @@ public:
|
|||||||
BOOST_BEAST_DECL
|
BOOST_BEAST_DECL
|
||||||
void
|
void
|
||||||
teardown(
|
teardown(
|
||||||
websocket::role_type,
|
role_type,
|
||||||
stream& s,
|
stream& s,
|
||||||
boost::system::error_code& ec);
|
boost::system::error_code& ec);
|
||||||
|
|
||||||
@ -503,7 +503,7 @@ public:
|
|||||||
BOOST_BEAST_DECL
|
BOOST_BEAST_DECL
|
||||||
void
|
void
|
||||||
async_teardown(
|
async_teardown(
|
||||||
websocket::role_type role,
|
role_type role,
|
||||||
stream& s,
|
stream& s,
|
||||||
TeardownHandler&& handler);
|
TeardownHandler&& handler);
|
||||||
#endif
|
#endif
|
||||||
|
@ -14,8 +14,8 @@
|
|||||||
#include <boost/beast/core/detail/stream_base.hpp>
|
#include <boost/beast/core/detail/stream_base.hpp>
|
||||||
#include <boost/beast/core/error.hpp>
|
#include <boost/beast/core/error.hpp>
|
||||||
#include <boost/beast/core/rate_policy.hpp>
|
#include <boost/beast/core/rate_policy.hpp>
|
||||||
|
#include <boost/beast/core/role.hpp>
|
||||||
#include <boost/beast/core/stream_traits.hpp>
|
#include <boost/beast/core/stream_traits.hpp>
|
||||||
#include <boost/beast/websocket/role.hpp> // VFALCO This is unfortunate
|
|
||||||
#include <boost/asio/async_result.hpp>
|
#include <boost/asio/async_result.hpp>
|
||||||
#include <boost/asio/basic_stream_socket.hpp>
|
#include <boost/asio/basic_stream_socket.hpp>
|
||||||
#include <boost/asio/connect.hpp>
|
#include <boost/asio/connect.hpp>
|
||||||
|
@ -972,7 +972,7 @@ template<
|
|||||||
class Protocol, class Executor, class RatePolicy>
|
class Protocol, class Executor, class RatePolicy>
|
||||||
void
|
void
|
||||||
teardown(
|
teardown(
|
||||||
websocket::role_type role,
|
role_type role,
|
||||||
basic_stream<Protocol, Executor, RatePolicy>& stream,
|
basic_stream<Protocol, Executor, RatePolicy>& stream,
|
||||||
error_code& ec)
|
error_code& ec)
|
||||||
{
|
{
|
||||||
@ -985,7 +985,7 @@ template<
|
|||||||
class TeardownHandler>
|
class TeardownHandler>
|
||||||
void
|
void
|
||||||
async_teardown(
|
async_teardown(
|
||||||
websocket::role_type role,
|
role_type role,
|
||||||
basic_stream<Protocol, Executor, RatePolicy>& stream,
|
basic_stream<Protocol, Executor, RatePolicy>& stream,
|
||||||
TeardownHandler&& handler)
|
TeardownHandler&& handler)
|
||||||
{
|
{
|
||||||
|
@ -255,7 +255,7 @@ async_write_some(
|
|||||||
template<class NextLayer>
|
template<class NextLayer>
|
||||||
void
|
void
|
||||||
teardown(
|
teardown(
|
||||||
boost::beast::websocket::role_type role,
|
boost::beast::role_type role,
|
||||||
flat_stream<NextLayer>& s,
|
flat_stream<NextLayer>& s,
|
||||||
error_code& ec)
|
error_code& ec)
|
||||||
{
|
{
|
||||||
@ -266,7 +266,7 @@ teardown(
|
|||||||
template<class NextLayer, class TeardownHandler>
|
template<class NextLayer, class TeardownHandler>
|
||||||
void
|
void
|
||||||
async_teardown(
|
async_teardown(
|
||||||
boost::beast::websocket::role_type role,
|
boost::beast::role_type role,
|
||||||
flat_stream<NextLayer>& s,
|
flat_stream<NextLayer>& s,
|
||||||
TeardownHandler&& handler)
|
TeardownHandler&& handler)
|
||||||
{
|
{
|
||||||
|
50
include/boost/beast/core/role.hpp
Normal file
50
include/boost/beast/core/role.hpp
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
//
|
||||||
|
// Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com)
|
||||||
|
//
|
||||||
|
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||||
|
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
//
|
||||||
|
// Official repository: https://github.com/boostorg/beast
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef BOOST_BEAST_ROLE_HPP
|
||||||
|
#define BOOST_BEAST_ROLE_HPP
|
||||||
|
|
||||||
|
#include <boost/beast/core/detail/config.hpp>
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace beast {
|
||||||
|
|
||||||
|
/** The role of local or remote peer.
|
||||||
|
|
||||||
|
Whether the endpoint is a client or server affects the
|
||||||
|
behavior of teardown.
|
||||||
|
The teardown behavior also depends on the type of the stream
|
||||||
|
being torn down.
|
||||||
|
|
||||||
|
The default implementation of teardown for regular
|
||||||
|
TCP/IP sockets is as follows:
|
||||||
|
|
||||||
|
@li In the client role, a TCP/IP shutdown is sent after
|
||||||
|
reading all remaining data on the connection.
|
||||||
|
|
||||||
|
@li In the server role, a TCP/IP shutdown is sent before
|
||||||
|
reading all remaining data on the connection.
|
||||||
|
|
||||||
|
When the next layer type is a `net::ssl::stream`,
|
||||||
|
the connection is closed by performing the SSL closing
|
||||||
|
handshake corresponding to the role type, client or server.
|
||||||
|
*/
|
||||||
|
enum class role_type
|
||||||
|
{
|
||||||
|
/// The stream is operating as a client.
|
||||||
|
client,
|
||||||
|
|
||||||
|
/// The stream is operating as a server.
|
||||||
|
server
|
||||||
|
};
|
||||||
|
|
||||||
|
} // beast
|
||||||
|
} // boost
|
||||||
|
|
||||||
|
#endif
|
@ -658,7 +658,7 @@ public:
|
|||||||
template<class SyncStream>
|
template<class SyncStream>
|
||||||
void
|
void
|
||||||
teardown(
|
teardown(
|
||||||
boost::beast::websocket::role_type role,
|
boost::beast::role_type role,
|
||||||
ssl_stream<SyncStream>& stream,
|
ssl_stream<SyncStream>& stream,
|
||||||
boost::system::error_code& ec)
|
boost::system::error_code& ec)
|
||||||
{
|
{
|
||||||
@ -670,7 +670,7 @@ teardown(
|
|||||||
template<class AsyncStream, class TeardownHandler>
|
template<class AsyncStream, class TeardownHandler>
|
||||||
void
|
void
|
||||||
async_teardown(
|
async_teardown(
|
||||||
boost::beast::websocket::role_type role,
|
boost::beast::role_type role,
|
||||||
ssl_stream<AsyncStream>& stream,
|
ssl_stream<AsyncStream>& stream,
|
||||||
TeardownHandler&& handler)
|
TeardownHandler&& handler)
|
||||||
{
|
{
|
||||||
|
@ -15,7 +15,6 @@
|
|||||||
#include <boost/beast/websocket/error.hpp>
|
#include <boost/beast/websocket/error.hpp>
|
||||||
#include <boost/beast/websocket/option.hpp>
|
#include <boost/beast/websocket/option.hpp>
|
||||||
#include <boost/beast/websocket/rfc6455.hpp>
|
#include <boost/beast/websocket/rfc6455.hpp>
|
||||||
#include <boost/beast/websocket/role.hpp>
|
|
||||||
#include <boost/beast/websocket/stream.hpp>
|
#include <boost/beast/websocket/stream.hpp>
|
||||||
#include <boost/beast/websocket/stream_fwd.hpp>
|
#include <boost/beast/websocket/stream_fwd.hpp>
|
||||||
#include <boost/beast/websocket/teardown.hpp>
|
#include <boost/beast/websocket/teardown.hpp>
|
||||||
|
@ -10,14 +10,14 @@
|
|||||||
#ifndef BOOST_BEAST_WEBSOCKET_DETAIL_IMPL_BASE_HPP
|
#ifndef BOOST_BEAST_WEBSOCKET_DETAIL_IMPL_BASE_HPP
|
||||||
#define BOOST_BEAST_WEBSOCKET_DETAIL_IMPL_BASE_HPP
|
#define BOOST_BEAST_WEBSOCKET_DETAIL_IMPL_BASE_HPP
|
||||||
|
|
||||||
|
#include <boost/beast/websocket/option.hpp>
|
||||||
|
#include <boost/beast/websocket/detail/frame.hpp>
|
||||||
|
#include <boost/beast/websocket/detail/pmd_extension.hpp>
|
||||||
#include <boost/beast/core/buffer_size.hpp>
|
#include <boost/beast/core/buffer_size.hpp>
|
||||||
|
#include <boost/beast/core/role.hpp>
|
||||||
#include <boost/beast/http/empty_body.hpp>
|
#include <boost/beast/http/empty_body.hpp>
|
||||||
#include <boost/beast/http/message.hpp>
|
#include <boost/beast/http/message.hpp>
|
||||||
#include <boost/beast/http/string_body.hpp>
|
#include <boost/beast/http/string_body.hpp>
|
||||||
#include <boost/beast/websocket/option.hpp>
|
|
||||||
#include <boost/beast/websocket/role.hpp>
|
|
||||||
#include <boost/beast/websocket/detail/frame.hpp>
|
|
||||||
#include <boost/beast/websocket/detail/pmd_extension.hpp>
|
|
||||||
#include <boost/beast/zlib/deflate_stream.hpp>
|
#include <boost/beast/zlib/deflate_stream.hpp>
|
||||||
#include <boost/beast/zlib/inflate_stream.hpp>
|
#include <boost/beast/zlib/inflate_stream.hpp>
|
||||||
#include <boost/beast/core/buffers_suffix.hpp>
|
#include <boost/beast/core/buffers_suffix.hpp>
|
||||||
|
@ -12,48 +12,24 @@
|
|||||||
|
|
||||||
#include <boost/beast/core/detail/config.hpp>
|
#include <boost/beast/core/detail/config.hpp>
|
||||||
|
|
||||||
|
#if ! BOOST_BEAST_ALLOW_DEPRECATED
|
||||||
|
|
||||||
|
#error This file is deprecated interface, #define BOOST_BEAST_ALLOW_DEPRECATED to allow it
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#include <boost/beast/core/role.hpp>
|
||||||
|
|
||||||
namespace boost {
|
namespace boost {
|
||||||
namespace beast {
|
namespace beast {
|
||||||
namespace websocket {
|
namespace websocket {
|
||||||
|
|
||||||
/** The role of the websocket stream endpoint.
|
using role_type = beast::role_type;
|
||||||
|
|
||||||
Whether the endpoint is a client or server affects the
|
|
||||||
behavior of the <em>Close the WebSocket Connection</em>
|
|
||||||
operation described in rfc6455 section 7.1.1.
|
|
||||||
The shutdown behavior depends on the type of the next
|
|
||||||
layer template parameter used to construct the @ref stream.
|
|
||||||
Other next layer types including user-defined types
|
|
||||||
may implement different role-based behavior when
|
|
||||||
performing the close operation.
|
|
||||||
|
|
||||||
The default implementation for @ref stream when the next
|
|
||||||
layer type is a `net::ip::tcp::socket` behaves
|
|
||||||
as follows:
|
|
||||||
|
|
||||||
@li In the client role, a TCP/IP shutdown is sent after
|
|
||||||
reading all remaining data on the connection.
|
|
||||||
|
|
||||||
@li In the server role, a TCP/IP shutdown is sent before
|
|
||||||
reading all remaining data on the connection.
|
|
||||||
|
|
||||||
When the next layer type is a `net::ssl::stream`,
|
|
||||||
the connection is closed by performing the SSL closing
|
|
||||||
handshake corresponding to the role type, client or server.
|
|
||||||
|
|
||||||
@see https://tools.ietf.org/html/rfc6455#section-7.1.1
|
|
||||||
*/
|
|
||||||
enum class role_type
|
|
||||||
{
|
|
||||||
/// The stream is operating as a client.
|
|
||||||
client,
|
|
||||||
|
|
||||||
/// The stream is operating as a server.
|
|
||||||
server
|
|
||||||
};
|
|
||||||
|
|
||||||
} // websocket
|
} // websocket
|
||||||
} // beast
|
} // beast
|
||||||
} // boost
|
} // boost
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
@ -73,7 +73,6 @@ teardown(
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
template<class AsyncStream, class TeardownHandler>
|
template<class AsyncStream, class TeardownHandler>
|
||||||
inline
|
|
||||||
void
|
void
|
||||||
async_teardown(
|
async_teardown(
|
||||||
role_type role,
|
role_type role,
|
||||||
|
@ -13,13 +13,13 @@
|
|||||||
#include <boost/beast/core/detail/config.hpp>
|
#include <boost/beast/core/detail/config.hpp>
|
||||||
#include <boost/beast/websocket/error.hpp>
|
#include <boost/beast/websocket/error.hpp>
|
||||||
#include <boost/beast/websocket/option.hpp>
|
#include <boost/beast/websocket/option.hpp>
|
||||||
#include <boost/beast/websocket/role.hpp>
|
|
||||||
#include <boost/beast/websocket/rfc6455.hpp>
|
#include <boost/beast/websocket/rfc6455.hpp>
|
||||||
#include <boost/beast/websocket/stream_base.hpp>
|
#include <boost/beast/websocket/stream_base.hpp>
|
||||||
#include <boost/beast/websocket/stream_fwd.hpp>
|
#include <boost/beast/websocket/stream_fwd.hpp>
|
||||||
#include <boost/beast/websocket/detail/hybi13.hpp>
|
#include <boost/beast/websocket/detail/hybi13.hpp>
|
||||||
#include <boost/beast/websocket/detail/impl_base.hpp>
|
#include <boost/beast/websocket/detail/impl_base.hpp>
|
||||||
#include <boost/beast/websocket/detail/pmd_extension.hpp>
|
#include <boost/beast/websocket/detail/pmd_extension.hpp>
|
||||||
|
#include <boost/beast/core/role.hpp>
|
||||||
#include <boost/beast/core/stream_traits.hpp>
|
#include <boost/beast/core/stream_traits.hpp>
|
||||||
#include <boost/beast/core/string.hpp>
|
#include <boost/beast/core/string.hpp>
|
||||||
#include <boost/beast/core/detail/type_traits.hpp>
|
#include <boost/beast/core/detail/type_traits.hpp>
|
||||||
|
@ -11,8 +11,8 @@
|
|||||||
#define BOOST_BEAST_WEBSOCKET_STREAM_BASE_HPP
|
#define BOOST_BEAST_WEBSOCKET_STREAM_BASE_HPP
|
||||||
|
|
||||||
#include <boost/beast/core/detail/config.hpp>
|
#include <boost/beast/core/detail/config.hpp>
|
||||||
#include <boost/beast/websocket/role.hpp>
|
|
||||||
#include <boost/beast/websocket/detail/decorator.hpp>
|
#include <boost/beast/websocket/detail/decorator.hpp>
|
||||||
|
#include <boost/beast/core/role.hpp>
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
|
|
||||||
namespace boost {
|
namespace boost {
|
||||||
|
@ -12,6 +12,8 @@
|
|||||||
|
|
||||||
#include <boost/beast/core/detail/config.hpp>
|
#include <boost/beast/core/detail/config.hpp>
|
||||||
|
|
||||||
|
//[code_websocket_1h
|
||||||
|
|
||||||
namespace boost {
|
namespace boost {
|
||||||
namespace beast {
|
namespace beast {
|
||||||
namespace websocket {
|
namespace websocket {
|
||||||
@ -25,4 +27,6 @@ class stream;
|
|||||||
} // beast
|
} // beast
|
||||||
} // boost
|
} // boost
|
||||||
|
|
||||||
|
//]
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
#include <boost/beast/core/detail/config.hpp>
|
#include <boost/beast/core/detail/config.hpp>
|
||||||
#include <boost/beast/core/error.hpp>
|
#include <boost/beast/core/error.hpp>
|
||||||
#include <boost/beast/websocket/role.hpp>
|
#include <boost/beast/core/role.hpp>
|
||||||
#include <boost/asio/basic_stream_socket.hpp>
|
#include <boost/asio/basic_stream_socket.hpp>
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
|
|
||||||
|
@ -62,6 +62,7 @@ add_executable (tests-beast-core
|
|||||||
ostream.cpp
|
ostream.cpp
|
||||||
rate_policy.cpp
|
rate_policy.cpp
|
||||||
read_size.cpp
|
read_size.cpp
|
||||||
|
role.cpp
|
||||||
saved_handler.cpp
|
saved_handler.cpp
|
||||||
span.cpp
|
span.cpp
|
||||||
static_buffer.cpp
|
static_buffer.cpp
|
||||||
|
@ -50,6 +50,7 @@ local SOURCES =
|
|||||||
ostream.cpp
|
ostream.cpp
|
||||||
rate_policy.cpp
|
rate_policy.cpp
|
||||||
read_size.cpp
|
read_size.cpp
|
||||||
|
role.cpp
|
||||||
saved_handler.cpp
|
saved_handler.cpp
|
||||||
span.cpp
|
span.cpp
|
||||||
static_buffer.cpp
|
static_buffer.cpp
|
||||||
|
@ -1200,13 +1200,13 @@ public:
|
|||||||
{
|
{
|
||||||
error_code ec;
|
error_code ec;
|
||||||
stream_type s(ioc);
|
stream_type s(ioc);
|
||||||
teardown(websocket::role_type::client, s, ec);
|
teardown(role_type::client, s, ec);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
error_code ec;
|
error_code ec;
|
||||||
stream_type s(ioc);
|
stream_type s(ioc);
|
||||||
async_teardown(websocket::role_type::server, s,
|
async_teardown(role_type::server, s,
|
||||||
[](error_code)
|
[](error_code)
|
||||||
{
|
{
|
||||||
});
|
});
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
#include <boost/beast/_experimental/unit_test/suite.hpp>
|
#include <boost/beast/_experimental/unit_test/suite.hpp>
|
||||||
#include <boost/beast/_experimental/test/stream.hpp>
|
#include <boost/beast/_experimental/test/stream.hpp>
|
||||||
#include <boost/beast/websocket/role.hpp>
|
#include <boost/beast/core/role.hpp>
|
||||||
#include <initializer_list>
|
#include <initializer_list>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
@ -162,14 +162,14 @@ public:
|
|||||||
flat_stream<test::stream> s(ioc);
|
flat_stream<test::stream> s(ioc);
|
||||||
ts.connect(s.next_layer());
|
ts.connect(s.next_layer());
|
||||||
error_code ec;
|
error_code ec;
|
||||||
teardown(websocket::role_type::client, s, ec);
|
teardown(role_type::client, s, ec);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
test::stream ts(ioc);
|
test::stream ts(ioc);
|
||||||
flat_stream<test::stream> s(ioc);
|
flat_stream<test::stream> s(ioc);
|
||||||
ts.connect(s.next_layer());
|
ts.connect(s.next_layer());
|
||||||
async_teardown(websocket::role_type::client, s,
|
async_teardown(role_type::client, s,
|
||||||
[](error_code)
|
[](error_code)
|
||||||
{
|
{
|
||||||
});
|
});
|
||||||
|
@ -8,4 +8,4 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
// Test that header file is self-contained.
|
// Test that header file is self-contained.
|
||||||
#include <boost/beast/websocket/role.hpp>
|
#include <boost/beast/core/role.hpp>
|
@ -32,7 +32,6 @@ add_executable (tests-beast-websocket
|
|||||||
read2.cpp
|
read2.cpp
|
||||||
read3.cpp
|
read3.cpp
|
||||||
rfc6455.cpp
|
rfc6455.cpp
|
||||||
role.cpp
|
|
||||||
stream.cpp
|
stream.cpp
|
||||||
stream_base.cpp
|
stream_base.cpp
|
||||||
stream_explicit.cpp
|
stream_explicit.cpp
|
||||||
|
@ -22,7 +22,6 @@ local SOURCES =
|
|||||||
read2.cpp
|
read2.cpp
|
||||||
read3.cpp
|
read3.cpp
|
||||||
rfc6455.cpp
|
rfc6455.cpp
|
||||||
role.cpp
|
|
||||||
stream.cpp
|
stream.cpp
|
||||||
stream_base.cpp
|
stream_base.cpp
|
||||||
stream_explicit.cpp
|
stream_explicit.cpp
|
||||||
|
@ -26,6 +26,7 @@ add_executable (tests-doc
|
|||||||
http_10_custom_parser.cpp
|
http_10_custom_parser.cpp
|
||||||
http_examples.cpp
|
http_examples.cpp
|
||||||
http_snippets.cpp
|
http_snippets.cpp
|
||||||
|
websocket.cpp
|
||||||
websocket_3_handshake.cpp
|
websocket_3_handshake.cpp
|
||||||
websocket_snippets.cpp
|
websocket_snippets.cpp
|
||||||
exemplars.cpp
|
exemplars.cpp
|
||||||
|
@ -24,6 +24,7 @@ alias run-tests :
|
|||||||
[ run core_4_layers.cpp $(TEST_MAIN) ]
|
[ run core_4_layers.cpp $(TEST_MAIN) ]
|
||||||
[ run http_10_custom_parser.cpp $(TEST_MAIN) ]
|
[ run http_10_custom_parser.cpp $(TEST_MAIN) ]
|
||||||
[ run http_examples.cpp $(TEST_MAIN) ]
|
[ run http_examples.cpp $(TEST_MAIN) ]
|
||||||
|
[ run websocket.cpp $(TEST_MAIN) ]
|
||||||
[ run websocket_3_handshake.cpp $(TEST_MAIN) ]
|
[ run websocket_3_handshake.cpp $(TEST_MAIN) ]
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -34,6 +35,7 @@ exe fat-tests :
|
|||||||
core_4_layers.cpp
|
core_4_layers.cpp
|
||||||
http_10_custom_parser.cpp
|
http_10_custom_parser.cpp
|
||||||
http_examples.cpp
|
http_examples.cpp
|
||||||
|
websocket.cpp
|
||||||
websocket_3_handshake.cpp
|
websocket_3_handshake.cpp
|
||||||
;
|
;
|
||||||
|
|
||||||
|
97
test/doc/websocket.cpp
Normal file
97
test/doc/websocket.cpp
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
//
|
||||||
|
// Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com)
|
||||||
|
//
|
||||||
|
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||||
|
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
//
|
||||||
|
// Official repository: https://github.com/boostorg/beast
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "snippets.hpp"
|
||||||
|
|
||||||
|
#include <boost/beast/_experimental/unit_test/suite.hpp>
|
||||||
|
|
||||||
|
#ifdef BOOST_MSVC
|
||||||
|
#pragma warning(push)
|
||||||
|
#pragma warning(disable: 4459) // declaration hides global declaration
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//[code_websocket_1a
|
||||||
|
#include <boost/beast/core.hpp>
|
||||||
|
#include <boost/beast/http.hpp>
|
||||||
|
#include <boost/beast/ssl.hpp>
|
||||||
|
#include <boost/beast/websocket.hpp>
|
||||||
|
//]
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
//[code_websocket_1b
|
||||||
|
namespace net = boost::asio;
|
||||||
|
using namespace boost::beast;
|
||||||
|
using namespace boost::beast::websocket;
|
||||||
|
|
||||||
|
net::io_context ioc;
|
||||||
|
net::ssl::context ctx(net::ssl::context::sslv23);
|
||||||
|
|
||||||
|
//]
|
||||||
|
|
||||||
|
void
|
||||||
|
websocket_snippets()
|
||||||
|
{
|
||||||
|
{
|
||||||
|
//[code_websocket_1f
|
||||||
|
|
||||||
|
// This newly constructed WebSocket stream will use the specified
|
||||||
|
// I/O context and have support for the permessage-deflate extension.
|
||||||
|
|
||||||
|
stream<tcp_stream> ws(ioc);
|
||||||
|
|
||||||
|
//]
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
//[code_websocket_2f
|
||||||
|
|
||||||
|
// The `tcp_stream` will be constructed with a new strand which
|
||||||
|
// uses the specified I/O context.
|
||||||
|
|
||||||
|
stream<tcp_stream> ws(make_strand(ioc));
|
||||||
|
|
||||||
|
//]
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
//[code_websocket_3f
|
||||||
|
|
||||||
|
// The WebSocket stream will use SSL and a new strand
|
||||||
|
stream<ssl_stream<tcp_stream>> wss(make_strand(ioc), ctx);
|
||||||
|
|
||||||
|
//
|
||||||
|
//]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} // (anon)
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace beast {
|
||||||
|
|
||||||
|
struct websocket_snippets_test
|
||||||
|
: public beast::unit_test::suite
|
||||||
|
{
|
||||||
|
void
|
||||||
|
run() override
|
||||||
|
{
|
||||||
|
BEAST_EXPECT(&websocket_snippets);
|
||||||
|
pass();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
BEAST_DEFINE_TESTSUITE(beast,doc,websocket_snippets);
|
||||||
|
|
||||||
|
} // beast
|
||||||
|
} // boost
|
||||||
|
|
||||||
|
#ifdef BOOST_MSVC
|
||||||
|
#pragma warning(pop)
|
||||||
|
#endif
|
@ -10,18 +10,17 @@
|
|||||||
#include <boost/beast/core.hpp>
|
#include <boost/beast/core.hpp>
|
||||||
#include <boost/asio.hpp>
|
#include <boost/asio.hpp>
|
||||||
#include <boost/asio/spawn.hpp>
|
#include <boost/asio/spawn.hpp>
|
||||||
|
#include <boost/asio/ssl.hpp>
|
||||||
#include <boost/asio/use_future.hpp>
|
#include <boost/asio/use_future.hpp>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <future>
|
#include <future>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
|
|
||||||
//[ws_snippet_1
|
using namespace boost::beast;
|
||||||
|
|
||||||
#include <boost/beast/websocket.hpp>
|
#include <boost/beast/websocket.hpp>
|
||||||
using namespace boost::beast::websocket;
|
using namespace boost::beast::websocket;
|
||||||
//]
|
|
||||||
|
|
||||||
using namespace boost::beast;
|
|
||||||
|
|
||||||
namespace doc_ws_snippets {
|
namespace doc_ws_snippets {
|
||||||
|
|
||||||
@ -34,12 +33,6 @@ error_code ec;
|
|||||||
net::ip::tcp::socket sock{ioc};
|
net::ip::tcp::socket sock{ioc};
|
||||||
boost::ignore_unused(ec);
|
boost::ignore_unused(ec);
|
||||||
|
|
||||||
{
|
|
||||||
//[ws_snippet_2
|
|
||||||
stream<net::ip::tcp::socket> ws{ioc};
|
|
||||||
//]
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
{
|
||||||
//[ws_snippet_3
|
//[ws_snippet_3
|
||||||
stream<net::ip::tcp::socket> ws{std::move(sock)};
|
stream<net::ip::tcp::socket> ws{std::move(sock)};
|
||||||
@ -277,25 +270,10 @@ struct custom_wrapper
|
|||||||
|
|
||||||
//]
|
//]
|
||||||
|
|
||||||
//[ws_snippet_26
|
|
||||||
|
|
||||||
// A WebSocket stream
|
|
||||||
template<
|
|
||||||
class NextLayer,
|
|
||||||
bool deflateSupported = true>
|
|
||||||
class stream;
|
|
||||||
|
|
||||||
//]
|
|
||||||
|
|
||||||
} // doc_ws_snippets
|
} // doc_ws_snippets
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
//[wss_snippet_1
|
|
||||||
#include <boost/beast/websocket/ssl.hpp>
|
|
||||||
#include <boost/asio/ssl.hpp>
|
|
||||||
//]
|
|
||||||
|
|
||||||
namespace doc_wss_snippets {
|
namespace doc_wss_snippets {
|
||||||
|
|
||||||
void fxx() {
|
void fxx() {
|
||||||
@ -306,13 +284,6 @@ std::thread t{[&](){ ioc.run(); }};
|
|||||||
error_code ec;
|
error_code ec;
|
||||||
net::ip::tcp::socket sock{ioc};
|
net::ip::tcp::socket sock{ioc};
|
||||||
|
|
||||||
{
|
|
||||||
//[wss_snippet_2
|
|
||||||
net::ssl::context ctx{net::ssl::context::sslv23};
|
|
||||||
stream<net::ssl::stream<net::ip::tcp::socket>> wss{ioc, ctx};
|
|
||||||
//]
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
{
|
||||||
//[wss_snippet_3
|
//[wss_snippet_3
|
||||||
net::ip::tcp::endpoint ep;
|
net::ip::tcp::endpoint ep;
|
||||||
|
Reference in New Issue
Block a user