19#include <boost/asio/buffers_iterator.hpp>
20#include <boost/beast/http/serializer.hpp>
21#include <boost/uuid/uuid_io.hpp>
30 if (!parser.is_done())
33 boost::system::error_code ec = {};
38 return parser.is_done();
43 if (!parser.is_done())
46 boost::system::error_code ec = {};
51 return parser.is_done();
59 while (!serializer.is_done())
63 size_t totalBytes = 0;
64 boost::system::error_code ec = {};
65 serializer.next(ec, [&]<
typename ConstBufferSequence>(boost::system::error_code& currentError, ConstBufferSequence
const& buffers)
67 size_t totalBytesInBuffers = boost::asio::buffer_size(buffers);
70 currentError = boost::beast::http::error::need_more;
74 auto begin = boost::asio::buffers_begin(buffers);
75 auto end = boost::asio::buffers_end(buffers);
79 totalBytes += totalBytesInBuffers;
82 serializer.consume(totalBytes);
84 if (ec == boost::beast::http::error::need_more)
95 if (request.method() != boost::beast::http::verb::head)
102 serializer.split(
true);
106 while (!serializerIsDone(serializer))
110 size_t totalBytes = 0;
111 boost::system::error_code ec = {};
112 serializer.next(ec, [&]<
typename ConstBufferSequence>(boost::system::error_code& currentError, ConstBufferSequence
const& buffers)
114 size_t totalBytesInBuffers = boost::asio::buffer_size(buffers);
117 currentError = boost::beast::http::error::need_more;
121 auto begin = boost::asio::buffers_begin(buffers);
122 auto end = boost::asio::buffers_end(buffers);
126 totalBytes += totalBytesInBuffers;
129 serializer.consume(totalBytes);
131 if (ec == boost::beast::http::error::need_more)
143 sLog->OutMessageTo(logger,
"server.http",
LOG_LEVEL_DEBUG,
"{} Request {} {} done, status {}", clientInfo,
154 sLog->OutMessageTo(logger,
"server.http",
LOG_LEVEL_TRACE,
"{} Request: <REDACTED>", clientInfo);
160 sLog->OutMessageTo(logger,
"server.http",
LOG_LEVEL_TRACE,
"{} Response: <REDACTED>", clientInfo);
167 std::string info =
StringFormat(
"[{}:{}", address.to_string(), port);
170 info.append(
", Session Id: ");
171 info.append(boost::uuids::to_string(state->
Id));
void Resize(size_type bytes)
size_type GetRemainingSpace() const
void ReadCompleted(size_type bytes)
void WriteCompleted(size_type bytes)
size_type GetActiveSize() const
uint8 * GetWritePointer()
size_type GetBufferSize() const
virtual std::string GetClientInfo() const =0
static MessageBuffer SerializeRequest(Request const &request)
static bool ParseRequest(MessageBuffer &packet, RequestParser &parser)
void LogRequestAndResponse(RequestContext const &context, MessageBuffer &buffer) const
static MessageBuffer SerializeResponse(Request const &request, Response const &response)
static bool ParseResponse(MessageBuffer &packet, ResponseParser &parser)
boost::beast::http::request_serializer< ResponseBody > RequestSerializer
boost::beast::http::response< ResponseBody > Response
boost::beast::http::request_parser< RequestBody > RequestParser
std::string_view ToStdStringView(boost::beast::string_view bsw)
boost::beast::http::response_serializer< ResponseBody > ResponseSerializer
boost::beast::http::response_parser< RequestBody > ResponseParser
TC_NETWORK_API bool CanLogResponseContent(RequestContext const &context)
boost::beast::http::request< RequestBody > Request
TC_NETWORK_API bool CanLogRequestContent(RequestContext const &context)
std::string StringFormat(FormatString< Args... > fmt, Args &&... args)
Default TC string format function.