#include "rootresponsehandler.h" // esp-idf includes #include #include // 3rdparty lib includes #include #include #include namespace { constexpr const char * const TAG = "ASIO_WEBSERVER"; } // namespace RootResponseHandler::RootResponseHandler(ClientConnection &clientConnection) : m_clientConnection{clientConnection} { // ESP_LOGV(TAG, "constructed for (%s:%hi)", // m_clientConnection.remote_endpoint().address().to_string().c_str(), m_clientConnection.remote_endpoint().port()); } RootResponseHandler::~RootResponseHandler() { // ESP_LOGV(TAG, "destructed for (%s:%hi)", // m_clientConnection.remote_endpoint().address().to_string().c_str(), m_clientConnection.remote_endpoint().port()); } void RootResponseHandler::requestHeaderReceived(std::string_view key, std::string_view value) { } void RootResponseHandler::requestBodyReceived(std::string_view body) { } void RootResponseHandler::sendResponse() { ESP_LOGI(TAG, "sending response for (%s:%hi)", m_clientConnection.remote_endpoint().address().to_string().c_str(), m_clientConnection.remote_endpoint().port()); m_response = "" "" "asio test webserver" "" "" "

asio test webserver

" "" "" ""; m_response = fmt::format("HTTP/1.1 200 Ok\r\n" "Connection: {}\r\n" "Content-Type: text/html\r\n" "Content-Length: {}\r\n" "\r\n" "{}", m_clientConnection.webserver().connectionKeepAlive() ? "keep-alive" : "close", m_response.size(), m_response); asio::async_write(m_clientConnection.socket(), asio::buffer(m_response.data(), m_response.size()), [this, self=m_clientConnection.shared_from_this()](std::error_code ec, std::size_t length) { written(ec, length); }); } void RootResponseHandler::written(std::error_code ec, std::size_t length) { if (ec) { ESP_LOGW(TAG, "error: %i (%s:%hi)", ec.value(), m_clientConnection.remote_endpoint().address().to_string().c_str(), m_clientConnection.remote_endpoint().port()); m_clientConnection.responseFinished(ec); return; } ESP_LOGI(TAG, "expected=%zd actual=%zd for (%s:%hi)", m_response.size(), length, m_clientConnection.remote_endpoint().address().to_string().c_str(), m_clientConnection.remote_endpoint().port()); m_clientConnection.responseFinished(ec); }