Files
boost_beast/doc/concept/FieldsReader.qbk
T
Vinnie Falco f9f6e1e0cc Refine FieldsReader concept (API Change)
* FieldsReader now requires chunked() and keep_alive()

* serializer logic calls into the reader to calculate
  the message metadata

* Removed some of the previous requirements of FieldsReader

Actions Required:

* Implement chunked() and keep_alive() for user defined FieldsReader types.
2017-07-20 08:15:27 -07:00

128 lines
3.6 KiB
Plaintext

[/
Copyright (c) 2013-2017 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)
]
[section:FieldsReader FieldsReader]
A [*FieldsReader] provides a algorithm to obtain a sequence of buffers
representing the complete serialized HTTP/1 header for a set of fields.
The implementation constructs an instance of this type when needed, and
calls into it once to retrieve the buffers.
In this table:
* `X` denotes a type that meets the requirements of [*FieldsReader].
* `F` denotes a __Fields__ where
`std::is_same<X, F::reader>::value == `true`.
* `a` is a value of type `X`.
* `f` is a value of type `F`.
* `v` is an `unsigned` value representing the HTTP version.
* `c` is an `unsigned` representing the HTTP status-code.
* `m` is a value of type [link beast.ref.beast__http__verb `verb`].
[table FieldsReader requirements
[[expression][type][semantics, pre/post-conditions]]
[
[`X::const_buffers_type`]
[]
[
A type which meets the requirements of __ConstBufferSequence__.
This is the type of buffer returned by `X::get`.
]
][
[`X(f,v,m)`]
[]
[
The implementation calls this constructor to indicate
that the fields being serialized form part of an HTTP
request. The lifetime of `f` is guaranteed
to end no earlier than after the `X` is destroyed.
]
][
[`X(f,v,c)`]
[]
[
The implementation calls this constructor to indicate
that the fields being serialized form part of an HTTP
response. The lifetime of `f` is guaranteed
to end no earlier than after the `X` is destroyed.
]
][
[`a.chunked()`]
[`bool`]
[
Called once after construction, this function returns `true`
if the [*Transfer-Encoding] field is present, and the last
token in its value is [*"chunked"].
]
][
[`a.keep_alive()`]
[`bool`]
[
Called once after construction, this function returns `true`
if the semantics of the mesage indicate that the connection
should remain open after processing the message. When the
HTTP version is below 1.1, `keep_alive` returns `true` when
the [*Connection] field is present, and its value contains the
"keep-alive" token. Otherwise, `keep_alive` returns `true`
when either the [*Connection] field is absent, or if the
value does not contain the "close" token.
]
][
[`a.get()`]
[X::const_buffers_type]
[
Called once after construction, this function returns
a constant buffer sequence containing the serialized
representation of the HTTP request or response including
the final carriage return linefeed sequence (`"\r\n"`).
]
][
[`is_fields_reader<F>`]
[`std::true_type`]
[
An alias for `std::true_type` for `F`, otherwise an alias
for `std::false_type`.
]
]
]
[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();
};
```
[endsect]