Files
boost_beast/include/boost/beast/http/write.hpp
T

765 lines
25 KiB
C++
Raw Normal View History

2017-07-20 08:01:46 -07:00
//
2019-02-21 07:00:31 -08:00
// Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com)
2017-07-20 08:01:46 -07:00
//
// 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)
//
2017-07-20 13:40:34 -07:00
// Official repository: https://github.com/boostorg/beast
//
2017-07-20 08:01:46 -07:00
2017-07-20 13:40:34 -07:00
#ifndef BOOST_BEAST_HTTP_WRITE_HPP
#define BOOST_BEAST_HTTP_WRITE_HPP
2017-07-20 08:01:46 -07:00
2017-10-10 07:49:03 -07:00
#include <boost/beast/core/detail/config.hpp>
#include <boost/beast/core/buffers_cat.hpp>
#include <boost/beast/core/buffers_suffix.hpp>
2017-07-20 13:40:34 -07:00
#include <boost/beast/core/multi_buffer.hpp>
#include <boost/beast/http/message.hpp>
#include <boost/beast/http/serializer.hpp>
#include <boost/beast/http/type_traits.hpp>
2017-07-20 13:40:34 -07:00
#include <boost/beast/http/detail/chunk_encode.hpp>
#include <boost/beast/core/error.hpp>
#include <boost/beast/core/string.hpp>
2017-09-07 07:39:52 -07:00
#include <boost/asio/async_result.hpp>
2017-06-04 15:35:21 -07:00
#include <iosfwd>
2017-05-08 12:41:45 -07:00
#include <limits>
#include <memory>
2017-07-20 08:01:46 -07:00
#include <type_traits>
2017-05-08 12:41:45 -07:00
#include <utility>
2017-07-20 08:01:46 -07:00
2017-07-20 13:40:34 -07:00
namespace boost {
2017-07-20 08:01:46 -07:00
namespace beast {
namespace http {
/** Write part of a message to a stream using a serializer.
This function is used to write part of a message to a stream using
a caller-provided HTTP/1 serializer. The call will block until one
of the following conditions is true:
2017-05-28 17:04:39 -07:00
@li One or more bytes have been transferred.
@li The function @ref serializer::is_done returns `true`
2017-05-28 17:04:39 -07:00
@li An error occurs on the stream.
This operation is implemented in terms of one or more calls
to the stream's `write_some` function.
The amount of data actually transferred is controlled by the behavior
2017-07-08 19:25:30 -07:00
of the underlying stream, subject to the buffer size limit of the
serializer obtained or set through a call to @ref serializer::limit.
Setting a limit and performing bounded work helps applications set
reasonable timeouts. It also allows application-level flow control
to function correctly. For example when using a TCP/IP based
stream.
2017-07-08 19:25:30 -07:00
@param stream The stream to which the data is to be written.
The type must support the @b SyncWriteStream concept.
2017-05-28 17:04:39 -07:00
@param sr The serializer to use.
@return The number of bytes written to the stream.
2017-05-28 17:04:39 -07:00
@throws system_error Thrown on failure.
@see serializer
*/
2017-07-09 20:09:30 -07:00
template<
class SyncWriteStream,
bool isRequest, class Body, class Fields>
std::size_t
2017-07-09 20:09:30 -07:00
write_some(
SyncWriteStream& stream,
serializer<isRequest, Body, Fields>& sr);
/** Write part of a message to a stream using a serializer.
2017-05-28 17:04:39 -07:00
This function is used to write part of a message to a stream using
a caller-provided HTTP/1 serializer. The call will block until one
of the following conditions is true:
2017-05-08 12:41:45 -07:00
2017-05-28 17:04:39 -07:00
@li One or more bytes have been transferred.
@li The function @ref serializer::is_done returns `true`
2017-05-28 17:04:39 -07:00
@li An error occurs on the stream.
This operation is implemented in terms of one or more calls
to the stream's `write_some` function.
The amount of data actually transferred is controlled by the behavior
2017-07-08 19:25:30 -07:00
of the underlying stream, subject to the buffer size limit of the
serializer obtained or set through a call to @ref serializer::limit.
Setting a limit and performing bounded work helps applications set
reasonable timeouts. It also allows application-level flow control
to function correctly. For example when using a TCP/IP based
stream.
2017-05-08 12:41:45 -07:00
@param stream The stream to which the data is to be written.
The type must support the @b SyncWriteStream concept.
2017-05-28 17:04:39 -07:00
@param sr The serializer to use.
2017-05-08 12:41:45 -07:00
2017-05-28 17:04:39 -07:00
@param ec Set to indicate what error occurred, if any.
2017-05-08 12:41:45 -07:00
@return The number of bytes written to the stream.
2017-05-28 17:04:39 -07:00
@see @ref async_write_some, @ref serializer
*/
2017-07-09 20:09:30 -07:00
template<
class SyncWriteStream,
bool isRequest, class Body, class Fields>
std::size_t
2017-07-09 20:09:30 -07:00
write_some(
SyncWriteStream& stream,
serializer<isRequest, Body, Fields>& sr,
error_code& ec);
2017-05-08 12:41:45 -07:00
/** Write part of a message to a stream asynchronously using a serializer.
2017-05-08 12:41:45 -07:00
This function is used to write part of a message to a stream
asynchronously using a caller-provided HTTP/1 serializer. The function
call always returns immediately. The asynchronous operation will continue
until one of the following conditions is true:
2017-05-08 12:41:45 -07:00
2017-05-28 17:04:39 -07:00
@li One or more bytes have been transferred.
2017-05-08 12:41:45 -07:00
@li The function @ref serializer::is_done returns `true`
2017-05-28 17:04:39 -07:00
@li An error occurs on the stream.
2017-05-08 12:41:45 -07:00
This operation is implemented in terms of zero or more calls to the stream's
`async_write_some` function, and is known as a <em>composed operation</em>.
2017-11-05 09:29:33 -08:00
The program must ensure that the stream performs no other writes
until this operation completes.
2017-05-08 12:41:45 -07:00
The amount of data actually transferred is controlled by the behavior
2017-07-08 19:25:30 -07:00
of the underlying stream, subject to the buffer size limit of the
serializer obtained or set through a call to @ref serializer::limit.
Setting a limit and performing bounded work helps applications set
reasonable timeouts. It also allows application-level flow control
to function correctly. For example when using a TCP/IP based
stream.
@param stream The stream to which the data is to be written.
The type must support the @b AsyncWriteStream concept.
2017-05-08 12:41:45 -07:00
@param sr The serializer to use.
2017-06-03 09:45:09 -07:00
The object must remain valid at least until the
handler is called; ownership is not transferred.
2017-05-08 12:41:45 -07:00
2019-02-20 18:55:01 -08:00
@param handler The completion handler to invoke when the operation
completes. The implementation takes ownership of the handler by
performing a decay-copy. The equivalent function signature of
the handler must be:
@code
void handler(
error_code const& error, // result of operation
std::size_t bytes_transferred // the number of bytes written to the stream
2019-02-20 18:55:01 -08:00
);
@endcode
2019-02-22 19:46:29 -08:00
2017-05-28 17:04:39 -07:00
Regardless of whether the asynchronous operation completes
immediately or not, the handler will not be invoked from within
this function. Invocation of the handler will be performed in a
2019-02-20 18:55:01 -08:00
manner equivalent to using `net::post`.
2017-05-08 12:41:45 -07:00
@see @ref serializer
2017-05-28 17:04:39 -07:00
*/
2017-07-09 20:09:30 -07:00
template<
class AsyncWriteStream,
2017-05-28 17:04:39 -07:00
bool isRequest, class Body, class Fields,
2017-07-09 20:09:30 -07:00
class WriteHandler>
2017-09-07 07:39:52 -07:00
BOOST_ASIO_INITFN_RESULT_TYPE(
WriteHandler, void(error_code, std::size_t))
2017-07-09 20:09:30 -07:00
async_write_some(
AsyncWriteStream& stream,
serializer<isRequest, Body, Fields>& sr,
WriteHandler&& handler);
//------------------------------------------------------------------------------
2017-07-20 08:01:46 -07:00
/** Write a header to a stream using a serializer.
2017-07-20 08:01:46 -07:00
This function is used to write a header to a stream using a
caller-provided HTTP/1 serializer. The call will block until one
of the following conditions is true:
@li The function @ref serializer::is_header_done returns `true`
2017-07-20 08:01:46 -07:00
@li An error occurs.
This operation is implemented in terms of one or more calls
to the stream's `write_some` function.
@param stream The stream to which the data is to be written.
The type must support the @b SyncWriteStream concept.
@param sr The serializer to use.
@return The number of bytes written to the stream.
2016-10-04 18:00:11 -04:00
@throws system_error Thrown on failure.
@note The implementation will call @ref serializer::split with
the value `true` on the serializer passed in.
@see @ref serializer
2017-07-20 08:01:46 -07:00
*/
2017-07-09 20:09:30 -07:00
template<
class SyncWriteStream,
bool isRequest, class Body, class Fields>
std::size_t
2017-07-09 20:09:30 -07:00
write_header(
SyncWriteStream& stream,
serializer<isRequest, Body, Fields>& sr);
2017-07-20 08:01:46 -07:00
/** Write a header to a stream using a serializer.
2017-07-20 08:01:46 -07:00
This function is used to write a header to a stream using a
caller-provided HTTP/1 serializer. The call will block until one
of the following conditions is true:
2017-07-20 08:01:46 -07:00
@li The function @ref serializer::is_header_done returns `true`
@li An error occurs.
This operation is implemented in terms of one or more calls
to the stream's `write_some` function.
@param stream The stream to which the data is to be written.
The type must support the @b SyncWriteStream concept.
@param sr The serializer to use.
2017-07-20 08:01:46 -07:00
@param ec Set to indicate what error occurred, if any.
@return The number of bytes written to the stream.
@note The implementation will call @ref serializer::split with
the value `true` on the serializer passed in.
@see @ref serializer
2017-07-20 08:01:46 -07:00
*/
2017-07-09 20:09:30 -07:00
template<
class SyncWriteStream,
bool isRequest, class Body, class Fields>
std::size_t
2017-07-09 20:09:30 -07:00
write_header(
SyncWriteStream& stream,
serializer<isRequest, Body, Fields>& sr,
error_code& ec);
2017-07-20 08:01:46 -07:00
/** Write a header to a stream asynchronously using a serializer.
2017-07-20 08:01:46 -07:00
This function is used to write a header to a stream asynchronously
using a caller-provided HTTP/1 serializer. The function call always
returns immediately. The asynchronous operation will continue until
one of the following conditions is true:
@li The function @ref serializer::is_header_done returns `true`
@li An error occurs.
This operation is implemented in terms of zero or more calls to the stream's
`async_write_some` function, and is known as a <em>composed operation</em>.
2017-11-05 09:29:33 -08:00
The program must ensure that the stream performs no other writes
until this operation completes.
@param stream The stream to which the data is to be written.
The type must support the @b AsyncWriteStream concept.
2017-07-20 08:01:46 -07:00
@param sr The serializer to use.
2017-06-03 09:45:09 -07:00
The object must remain valid at least until the
handler is called; ownership is not transferred.
2017-07-20 08:01:46 -07:00
2019-02-20 18:55:01 -08:00
@param handler The completion handler to invoke when the operation
completes. The implementation takes ownership of the handler by
performing a decay-copy. The equivalent function signature of
the handler must be:
@code
void handler(
error_code const& error, // result of operation
std::size_t bytes_transferred // the number of bytes written to the stream
2019-02-20 18:55:01 -08:00
);
@endcode
2019-02-22 19:46:29 -08:00
2017-07-20 08:01:46 -07:00
Regardless of whether the asynchronous operation completes
immediately or not, the handler will not be invoked from within
this function. Invocation of the handler will be performed in a
2019-02-20 18:55:01 -08:00
manner equivalent to using `net::post`.
@note The implementation will call @ref serializer::split with
the value `true` on the serializer passed in.
@see @ref serializer
*/
2017-07-09 20:09:30 -07:00
template<
class AsyncWriteStream,
bool isRequest, class Body, class Fields,
2017-07-09 20:09:30 -07:00
class WriteHandler>
2017-09-07 07:39:52 -07:00
BOOST_ASIO_INITFN_RESULT_TYPE(
WriteHandler, void(error_code, std::size_t))
2017-07-09 20:09:30 -07:00
async_write_header(
AsyncWriteStream& stream,
serializer<isRequest, Body, Fields>& sr,
WriteHandler&& handler);
//------------------------------------------------------------------------------
/** Write a complete message to a stream using a serializer.
This function is used to write a complete message to a stream using
a caller-provided HTTP/1 serializer. The call will block until one
of the following conditions is true:
@li The function @ref serializer::is_done returns `true`
@li An error occurs.
This operation is implemented in terms of one or more calls
to the stream's `write_some` function.
@param stream The stream to which the data is to be written.
The type must support the @b SyncWriteStream concept.
@param sr The serializer to use.
@return The number of bytes written to the stream.
@throws system_error Thrown on failure.
@see @ref serializer
*/
2017-07-09 20:09:30 -07:00
template<
class SyncWriteStream,
bool isRequest, class Body, class Fields>
std::size_t
2017-07-09 20:09:30 -07:00
write(
SyncWriteStream& stream,
serializer<isRequest, Body, Fields>& sr);
/** Write a complete message to a stream using a serializer.
This function is used to write a complete message to a stream using
a caller-provided HTTP/1 serializer. The call will block until one
of the following conditions is true:
@li The function @ref serializer::is_done returns `true`
@li An error occurs.
This operation is implemented in terms of one or more calls
to the stream's `write_some` function.
@param stream The stream to which the data is to be written.
The type must support the @b SyncWriteStream concept.
@param sr The serializer to use.
@param ec Set to the error, if any occurred.
@return The number of bytes written to the stream.
@see @ref serializer
*/
2017-07-09 20:09:30 -07:00
template<
class SyncWriteStream,
bool isRequest, class Body, class Fields>
std::size_t
2017-07-09 20:09:30 -07:00
write(
SyncWriteStream& stream,
serializer<isRequest, Body, Fields>& sr,
error_code& ec);
/** Write a complete message to a stream asynchronously using a serializer.
This function is used to write a complete message to a stream
asynchronously using a caller-provided HTTP/1 serializer. The
function call always returns immediately. The asynchronous
operation will continue until one of the following conditions is true:
@li The function @ref serializer::is_done returns `true`
@li An error occurs.
This operation is implemented in terms of zero or more calls to the stream's
`async_write_some` function, and is known as a <em>composed operation</em>.
2017-11-05 09:29:33 -08:00
The program must ensure that the stream performs no other writes
until this operation completes.
@param stream The stream to which the data is to be written.
The type must support the @b AsyncWriteStream concept.
@param sr The serializer to use.
2017-06-03 09:45:09 -07:00
The object must remain valid at least until the
handler is called; ownership is not transferred.
2019-02-20 18:55:01 -08:00
@param handler The completion handler to invoke when the operation
completes. The implementation takes ownership of the handler by
performing a decay-copy. The equivalent function signature of
the handler must be:
@code
void handler(
error_code const& error, // result of operation
std::size_t bytes_transferred // the number of bytes written to the stream
2019-02-20 18:55:01 -08:00
);
@endcode
2019-02-22 19:46:29 -08:00
Regardless of whether the asynchronous operation completes
immediately or not, the handler will not be invoked from within
this function. Invocation of the handler will be performed in a
2019-02-20 18:55:01 -08:00
manner equivalent to using `net::post`.
@see @ref serializer
*/
2017-07-09 20:09:30 -07:00
template<
class AsyncWriteStream,
bool isRequest, class Body, class Fields,
2017-07-09 20:09:30 -07:00
class WriteHandler>
2017-09-07 07:39:52 -07:00
BOOST_ASIO_INITFN_RESULT_TYPE(
WriteHandler, void(error_code, std::size_t))
2017-07-09 20:09:30 -07:00
async_write(
AsyncWriteStream& stream,
serializer<isRequest, Body, Fields>& sr,
WriteHandler&& handler);
//------------------------------------------------------------------------------
/** Write a complete message to a stream.
This function is used to write a complete message to a stream using
HTTP/1. The call will block until one of the following conditions is true:
@li The entire message is written.
@li An error occurs.
This operation is implemented in terms of one or more calls to the stream's
`write_some` function. The algorithm will use a temporary @ref serializer
with an empty chunk decorator to produce buffers.
@note This function only participates in overload resolution
if @ref is_mutable_body_writer for @b Body returns `true`.
@param stream The stream to which the data is to be written.
The type must support the @b SyncWriteStream concept.
@param msg The message to write.
@return The number of bytes written to the stream.
@throws system_error Thrown on failure.
@see @ref message
*/
2017-07-09 20:09:30 -07:00
template<
class SyncWriteStream,
bool isRequest, class Body, class Fields>
#if BOOST_BEAST_DOXYGEN
std::size_t
#else
typename std::enable_if<
is_mutable_body_writer<Body>::value,
std::size_t>::type
#endif
write(
SyncWriteStream& stream,
message<isRequest, Body, Fields>& msg);
/** Write a complete message to a stream.
This function is used to write a complete message to a stream using
HTTP/1. The call will block until one of the following conditions is true:
@li The entire message is written.
@li An error occurs.
This operation is implemented in terms of one or more calls to the stream's
`write_some` function. The algorithm will use a temporary @ref serializer
with an empty chunk decorator to produce buffers.
@note This function only participates in overload resolution
if @ref is_mutable_body_writer for @b Body returns `false`.
@param stream The stream to which the data is to be written.
The type must support the @b SyncWriteStream concept.
@param msg The message to write.
@return The number of bytes written to the stream.
@throws system_error Thrown on failure.
@see @ref message
*/
template<
class SyncWriteStream,
bool isRequest, class Body, class Fields>
#if BOOST_BEAST_DOXYGEN
std::size_t
#else
typename std::enable_if<
! is_mutable_body_writer<Body>::value,
std::size_t>::type
#endif
2017-07-09 20:09:30 -07:00
write(
SyncWriteStream& stream,
message<isRequest, Body, Fields> const& msg);
/** Write a complete message to a stream.
This function is used to write a complete message to a stream using
HTTP/1. The call will block until one of the following conditions is true:
@li The entire message is written.
@li An error occurs.
This operation is implemented in terms of one or more calls to the stream's
`write_some` function. The algorithm will use a temporary @ref serializer
with an empty chunk decorator to produce buffers.
@note This function only participates in overload resolution
if @ref is_mutable_body_writer for @b Body returns `true`.
@param stream The stream to which the data is to be written.
The type must support the @b SyncWriteStream concept.
@param msg The message to write.
@param ec Set to the error, if any occurred.
@return The number of bytes written to the stream.
@see @ref message
*/
2017-07-09 20:09:30 -07:00
template<
class SyncWriteStream,
bool isRequest, class Body, class Fields>
#if BOOST_BEAST_DOXYGEN
std::size_t
#else
typename std::enable_if<
is_mutable_body_writer<Body>::value,
std::size_t>::type
#endif
write(
SyncWriteStream& stream,
message<isRequest, Body, Fields>& msg,
error_code& ec);
/** Write a complete message to a stream.
This function is used to write a complete message to a stream using
HTTP/1. The call will block until one of the following conditions is true:
@li The entire message is written.
@li An error occurs.
This operation is implemented in terms of one or more calls to the stream's
`write_some` function. The algorithm will use a temporary @ref serializer
with an empty chunk decorator to produce buffers.
@note This function only participates in overload resolution
if @ref is_mutable_body_writer for @b Body returns `false`.
@param stream The stream to which the data is to be written.
The type must support the @b SyncWriteStream concept.
@param msg The message to write.
@param ec Set to the error, if any occurred.
@return The number of bytes written to the stream.
@see @ref message
*/
template<
class SyncWriteStream,
bool isRequest, class Body, class Fields>
#if BOOST_BEAST_DOXYGEN
std::size_t
#else
typename std::enable_if<
! is_mutable_body_writer<Body>::value,
std::size_t>::type
#endif
2017-07-09 20:09:30 -07:00
write(
SyncWriteStream& stream,
message<isRequest, Body, Fields> const& msg,
2017-07-09 20:09:30 -07:00
error_code& ec);
/** Write a complete message to a stream asynchronously.
This function is used to write a complete message to a stream asynchronously
using HTTP/1. The function call always returns immediately. The asynchronous
operation will continue until one of the following conditions is true:
@li The entire message is written.
@li An error occurs.
This operation is implemented in terms of zero or more calls to the stream's
`async_write_some` function, and is known as a <em>composed operation</em>.
2017-11-05 09:29:33 -08:00
The program must ensure that the stream performs no other writes
until this operation completes. The algorithm will use a temporary
@ref serializer with an empty chunk decorator to produce buffers.
@note This function only participates in overload resolution
if @ref is_mutable_body_writer for @b Body returns `true`.
@param stream The stream to which the data is to be written.
The type must support the @b AsyncWriteStream concept.
2017-06-03 09:45:09 -07:00
@param msg The message to write.
The object must remain valid at least until the
handler is called; ownership is not transferred.
2019-02-20 18:55:01 -08:00
@param handler The completion handler to invoke when the operation
completes. The implementation takes ownership of the handler by
performing a decay-copy. The equivalent function signature of
the handler must be:
@code
void handler(
error_code const& error, // result of operation
std::size_t bytes_transferred // the number of bytes written to the stream
2019-02-20 18:55:01 -08:00
);
@endcode
2019-02-22 19:46:29 -08:00
Regardless of whether the asynchronous operation completes
immediately or not, the handler will not be invoked from within
this function. Invocation of the handler will be performed in a
2019-02-20 18:55:01 -08:00
manner equivalent to using `net::post`.
@see @ref message
2017-07-20 08:01:46 -07:00
*/
2017-07-09 20:09:30 -07:00
template<
class AsyncWriteStream,
bool isRequest, class Body, class Fields,
2017-07-09 20:09:30 -07:00
class WriteHandler>
#if BOOST_BEAST_DOXYGEN
2017-09-07 07:39:52 -07:00
BOOST_ASIO_INITFN_RESULT_TYPE(
WriteHandler, void(error_code, std::size_t))
#else
typename std::enable_if<
is_mutable_body_writer<Body>::value,
BOOST_ASIO_INITFN_RESULT_TYPE(
WriteHandler, void(error_code, std::size_t))>::type
#endif
2017-07-09 20:09:30 -07:00
async_write(
AsyncWriteStream& stream,
2017-06-21 11:50:50 -07:00
message<isRequest, Body, Fields>& msg,
2017-07-09 20:09:30 -07:00
WriteHandler&& handler);
2017-07-20 08:01:46 -07:00
/** Write a complete message to a stream asynchronously.
This function is used to write a complete message to a stream asynchronously
using HTTP/1. The function call always returns immediately. The asynchronous
operation will continue until one of the following conditions is true:
@li The entire message is written.
@li An error occurs.
This operation is implemented in terms of zero or more calls to the stream's
`async_write_some` function, and is known as a <em>composed operation</em>.
The program must ensure that the stream performs no other writes
until this operation completes. The algorithm will use a temporary
@ref serializer with an empty chunk decorator to produce buffers.
@note This function only participates in overload resolution
if @ref is_mutable_body_writer for @b Body returns `false`.
@param stream The stream to which the data is to be written.
The type must support the @b AsyncWriteStream concept.
@param msg The message to write.
The object must remain valid at least until the
handler is called; ownership is not transferred.
2019-02-20 18:55:01 -08:00
@param handler The completion handler to invoke when the operation
completes. The implementation takes ownership of the handler by
performing a decay-copy. The equivalent function signature of
the handler must be:
@code
void handler(
error_code const& error, // result of operation
std::size_t bytes_transferred // the number of bytes written to the stream
2019-02-20 18:55:01 -08:00
);
@endcode
2019-02-22 19:46:29 -08:00
Regardless of whether the asynchronous operation completes
immediately or not, the handler will not be invoked from within
this function. Invocation of the handler will be performed in a
2019-02-20 18:55:01 -08:00
manner equivalent to using `net::post`.
@see @ref message
*/
template<
class AsyncWriteStream,
bool isRequest, class Body, class Fields,
class WriteHandler>
#if BOOST_BEAST_DOXYGEN
BOOST_ASIO_INITFN_RESULT_TYPE(
WriteHandler, void(error_code, std::size_t))
#else
typename std::enable_if<
! is_mutable_body_writer<Body>::value,
BOOST_ASIO_INITFN_RESULT_TYPE(
WriteHandler, void(error_code, std::size_t))>::type
#endif
async_write(
AsyncWriteStream& stream,
message<isRequest, Body, Fields> const& msg,
WriteHandler&& handler);
//------------------------------------------------------------------------------
2017-05-28 19:49:41 -07:00
/** Serialize an HTTP/1 header to a `std::ostream`.
The function converts the header to its HTTP/1 serialized
representation and stores the result in the output stream.
@param os The output stream to write to.
@param msg The message fields to write.
*/
template<bool isRequest, class Fields>
std::ostream&
operator<<(std::ostream& os,
header<isRequest, Fields> const& msg);
2017-05-28 19:49:41 -07:00
/** Serialize an HTTP/1 message to a `std::ostream`.
The function converts the message to its HTTP/1 serialized
representation and stores the result in the output stream.
The implementation will automatically perform chunk encoding if
the contents of the message indicate that chunk encoding is required.
@param os The output stream to write to.
@param msg The message to write.
*/
template<bool isRequest, class Body, class Fields>
std::ostream&
operator<<(std::ostream& os,
message<isRequest, Body, Fields> const& msg);
2017-07-20 08:01:46 -07:00
} // http
} // beast
2017-07-20 13:40:34 -07:00
} // boost
2017-07-20 08:01:46 -07:00
2019-02-22 13:06:43 -08:00
#include <boost/beast/http/impl/write.hpp>
2017-07-20 08:01:46 -07:00
#endif