20#include <boost/asio/buffers_iterator.hpp>
21#include <boost/beast/http/serializer.hpp>
22#include <boost/uuid/uuid_io.hpp>
31 if (!parser.is_done())
34 boost::system::error_code ec = {};
39 return parser.is_done();
44 if (!parser.is_done())
47 boost::system::error_code ec = {};
52 return parser.is_done();
60 while (!serializer.is_done())
64 size_t totalBytes = 0;
65 boost::system::error_code ec = {};
66 serializer.next(ec, [&]<
typename ConstBufferSequence>(boost::system::error_code& currentError, ConstBufferSequence
const& buffers)
68 size_t totalBytesInBuffers = boost::asio::buffer_size(buffers);
71 currentError = boost::beast::http::error::need_more;
75 auto begin = boost::asio::buffers_begin(buffers);
76 auto end = boost::asio::buffers_end(buffers);
80 totalBytes += totalBytesInBuffers;
83 serializer.consume(totalBytes);
85 if (ec == boost::beast::http::error::need_more)
96 if (request.method() != boost::beast::http::verb::head)
103 serializer.split(
true);
107 while (!serializerIsDone(serializer))
111 size_t totalBytes = 0;
112 boost::system::error_code ec = {};
113 serializer.next(ec, [&]<
typename ConstBufferSequence>(boost::system::error_code& currentError, ConstBufferSequence
const& buffers)
115 size_t totalBytesInBuffers = boost::asio::buffer_size(buffers);
118 currentError = boost::beast::http::error::need_more;
122 auto begin = boost::asio::buffers_begin(buffers);
123 auto end = boost::asio::buffers_end(buffers);
127 totalBytes += totalBytesInBuffers;
130 serializer.consume(totalBytes);
132 if (ec == boost::beast::http::error::need_more)
144 sLog->OutMessageTo(logger,
"server.http",
LOG_LEVEL_DEBUG,
"{} Request {} {} done, status {}", clientInfo,
155 sLog->OutMessageTo(logger,
"server.http",
LOG_LEVEL_TRACE,
"{} Request: <REDACTED>", clientInfo);
161 sLog->OutMessageTo(logger,
"server.http",
LOG_LEVEL_TRACE,
"{} Response: <REDACTED>", clientInfo);
168 std::string info =
StringFormat(
"[{}:{}", address, port);
171 info.append(
", Session Id: ");
172 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) noexcept
Default TC string format function.