forked from boostorg/beast
1 parent
a8c2f54534
commit
67e3e801cb
11 files changed
+293
-216
No files matched your search
@@ -82,6 +82,7 @@
|
||||
[import ../example/server-framework/file_body.hpp]
|
||||
[import ../example/websocket-client/websocket_client.cpp]
|
||||
|
||||
[import ../test/exemplars.cpp]
|
||||
[import ../test/core/doc_snippets.cpp]
|
||||
[import ../test/http/doc_snippets.cpp]
|
||||
[import ../test/websocket/doc_snippets.cpp]
|
||||
|
||||
+1
-17
@@ -69,22 +69,6 @@ In this table:
|
||||
|
||||
[heading Exemplar]
|
||||
|
||||
```
|
||||
struct Body
|
||||
{
|
||||
using value_type = implementation_defined;
|
||||
|
||||
/// The algorithm used for extracting buffers
|
||||
class reader;
|
||||
|
||||
/// The algorithm used for inserting buffers
|
||||
class writer;
|
||||
|
||||
/// Returns the body's payload size
|
||||
static
|
||||
std::uint64_t
|
||||
size(value_type const& v);
|
||||
}
|
||||
```
|
||||
[concept_Body]
|
||||
|
||||
[endsect]
|
||||
@@ -112,78 +112,8 @@ In this table:
|
||||
]
|
||||
]
|
||||
|
||||
[note
|
||||
Definitions for required [*BodyReader] member functions may
|
||||
be declared inline so the generated code can become part of
|
||||
the implementation.
|
||||
]
|
||||
|
||||
[heading Exemplar]
|
||||
|
||||
```
|
||||
struct BodyReader
|
||||
{
|
||||
public:
|
||||
/** Controls when the implementation requests buffers.
|
||||
|
||||
If false, the implementation will request the first buffer
|
||||
immediately and try to serialize both the header and some
|
||||
or all of the body in a single buffer.
|
||||
*/
|
||||
using is_deferred = std::false_type;
|
||||
|
||||
/// The type of buffer returned by `get`.
|
||||
using const_buffers_type = boost::asio::const_buffers_1;
|
||||
|
||||
/** Construct the reader.
|
||||
|
||||
@param msg The message whose body is to be retrieved.
|
||||
*/
|
||||
template<bool isRequest, class Body, class Headers>
|
||||
explicit
|
||||
BodyReader(message<isRequest, Body, Headers> const& msg);
|
||||
|
||||
/** Initialization.
|
||||
|
||||
Called once immediately after construction.
|
||||
|
||||
@param ec Set to the error, if any occurred.
|
||||
*/
|
||||
void
|
||||
init(error_code& ec)
|
||||
{
|
||||
// The specification requires this to indicate "no error"
|
||||
ec = {};
|
||||
}
|
||||
|
||||
/** Returns the next buffer in the body.
|
||||
|
||||
@li If the return value is `boost::none` (unseated optional) and
|
||||
`ec` does not contain an error, this indicates the end of the
|
||||
body, no more buffers are present.
|
||||
|
||||
@li If the optional contains a value, the first element of the
|
||||
pair represents a @b ConstBufferSequence containing one or
|
||||
more octets of the body data. The second element indicates
|
||||
whether or not there are additional octets of body data.
|
||||
A value of `true` means there is more data, and that the
|
||||
implementation will perform a subsequent call to `get`.
|
||||
A value of `false` means there is no more body data.
|
||||
|
||||
@li If `ec` contains an error code, the return value is ignored.
|
||||
|
||||
@param ec Set to the error, if any occurred.
|
||||
*/
|
||||
boost::optional<std::pair<const_buffers_type, bool>>
|
||||
get(error_code& ec);
|
||||
|
||||
/** Called after `get` indicates there are no more buffers.
|
||||
|
||||
@param ec Set to the error, if any occurred.
|
||||
*/
|
||||
void
|
||||
finish(error_code& ec);
|
||||
};
|
||||
```
|
||||
[concept_BodyReader]
|
||||
|
||||
[endsect]
|
||||
@@ -20,7 +20,7 @@ representation:
|
||||
to compress it first.
|
||||
* Saving body data to a file
|
||||
|
||||
In the table below:
|
||||
In this table:
|
||||
|
||||
* `X` denotes a type meeting the requirements of [*BodyWriter].
|
||||
|
||||
@@ -88,59 +88,8 @@ In the table below:
|
||||
]
|
||||
]
|
||||
|
||||
[note
|
||||
Definitions for required [*BodyReader] member functions may
|
||||
be declared inline so the generated code can become part of
|
||||
the implementation.
|
||||
]
|
||||
|
||||
[heading Exemplar]
|
||||
|
||||
```
|
||||
struct BodyWriter
|
||||
{
|
||||
/** Construct the writer.
|
||||
|
||||
@param msg The message whose body is to be stored.
|
||||
*/
|
||||
template<bool isRequest, class Body, class Fields>
|
||||
explicit
|
||||
BodyWriter(message<isRequest, Body, Fields>& msg);
|
||||
|
||||
/** Initialization.
|
||||
|
||||
Called once immediately before storing any buffers.
|
||||
|
||||
@param content_length The content length if known, else `boost::none`.
|
||||
|
||||
@param ec Set to the error, if any occurred.
|
||||
*/
|
||||
void
|
||||
init(boost::optional<std::uint64_t> content_length, error_code& ec)
|
||||
{
|
||||
// The specification requires this to indicate "no error"
|
||||
ec = {};
|
||||
}
|
||||
|
||||
/** Store buffers.
|
||||
|
||||
This is called zero or more times with parsed body octets.
|
||||
|
||||
@param buffers The constant buffer sequence to store.
|
||||
|
||||
@param ec Set to the error, if any occurred.
|
||||
*/
|
||||
template<class ConstBufferSequence>
|
||||
void
|
||||
put(ConstBufferSequence const& buffers, error_code& ec);
|
||||
|
||||
/** Called when the body is complete.
|
||||
|
||||
@param ec Set to the error, if any occurred.
|
||||
*/
|
||||
void
|
||||
finish(error_code& ec);
|
||||
};
|
||||
```
|
||||
[concept_BodyWriter]
|
||||
|
||||
[endsect]
|
||||
@@ -31,7 +31,7 @@ implementation strategies:
|
||||
size of the character sequence. This is the implementation approach
|
||||
currently offered by __multi_buffer__.
|
||||
|
||||
In the table below:
|
||||
In this table:
|
||||
|
||||
* `X` denotes a dynamic buffer class.
|
||||
* `a` denotes a value of type `X`.
|
||||
|
||||
+1
-49
@@ -127,54 +127,6 @@ In this table:
|
||||
|
||||
[heading Exemplar]
|
||||
|
||||
```
|
||||
class Fields
|
||||
{
|
||||
protected:
|
||||
/** Set or clear the method string.
|
||||
|
||||
@note Only called for requests.
|
||||
*/
|
||||
void set_method_impl(string_view s);
|
||||
|
||||
/** Set or clear the target string.
|
||||
|
||||
@note Only called for requests.
|
||||
*/
|
||||
void set_target_impl(string_view s);
|
||||
|
||||
/** Set or clear the reason string.
|
||||
|
||||
@note Only called for responses.
|
||||
*/
|
||||
void set_reason_impl(string_view s);
|
||||
|
||||
/** Returns the request-method string.
|
||||
|
||||
@note Only called for requests.
|
||||
*/
|
||||
string_view get_method_impl() const;
|
||||
|
||||
/** Returns the request-target string.
|
||||
|
||||
@note Only called for requests.
|
||||
*/
|
||||
string_view get_target_impl() const;
|
||||
|
||||
/** Returns the response reason-phrase string.
|
||||
|
||||
@note Only called for responses.
|
||||
*/
|
||||
string_view get_reason_impl() const;
|
||||
|
||||
/** Updates the payload metadata.
|
||||
|
||||
@param b `true` if chunked
|
||||
|
||||
@param n The content length if known, otherwise `boost::none`
|
||||
*/
|
||||
void prepare_payload_impl(bool b, boost::optional<std::uint64_t> n)
|
||||
};
|
||||
```
|
||||
[concept_Fields]
|
||||
|
||||
[endsect]
|
||||
@@ -98,30 +98,6 @@ In this table:
|
||||
|
||||
[heading Exemplar]
|
||||
|
||||
```
|
||||
struct FieldsReader
|
||||
{
|
||||
// The type of buffers returned by `get`
|
||||
using const_buffers_type = implementation-defined;
|
||||
|
||||
// Constructor for requests
|
||||
FieldsReader(F const& f, unsigned version, verb method);
|
||||
|
||||
// Constructor for responses
|
||||
FieldsReader(F const& f, unsigned version, unsigned status);
|
||||
|
||||
// Returns `true` if the payload uses the chunked Transfer-Encoding
|
||||
bool
|
||||
chunked();
|
||||
|
||||
// Returns `true` if keep-alive is indicated
|
||||
bool
|
||||
keep_alive();
|
||||
|
||||
// Returns the serialized header buffers
|
||||
const_buffers_type
|
||||
get();
|
||||
};
|
||||
```
|
||||
[concept_FieldsReader]
|
||||
|
||||
[endsect]
|
||||
Reference in new issue
Block a user