diff options
Diffstat (limited to 'http/http_connection.hpp')
-rw-r--r-- | http/http_connection.hpp | 50 |
1 files changed, 25 insertions, 25 deletions
diff --git a/http/http_connection.hpp b/http/http_connection.hpp index e02c518ebb..29e876d0a9 100644 --- a/http/http_connection.hpp +++ b/http/http_connection.hpp @@ -30,6 +30,7 @@ #include <atomic> #include <chrono> +#include <memory> #include <vector> namespace crow @@ -232,7 +233,7 @@ class Connection : { return; } - req = crow::Request(parser->release(), reqEc); + req = std::make_shared<crow::Request>(parser->release(), reqEc); if (reqEc) { BMCWEB_LOG_DEBUG("Request failed to construct{}", reqEc.message()); @@ -240,15 +241,15 @@ class Connection : completeRequest(res); return; } - req.session = userSession; + req->session = userSession; // Fetch the client IP address - req.ipAddress = ip; + req->ipAddress = ip; // Check for HTTP version 1.1. - if (req.version() == 11) + if (req->version() == 11) { - if (req.getHeaderValue(boost::beast::http::field::host).empty()) + if (req->getHeaderValue(boost::beast::http::field::host).empty()) { res.result(boost::beast::http::status::bad_request); completeRequest(res); @@ -257,11 +258,11 @@ class Connection : } BMCWEB_LOG_INFO("Request: {} HTTP/{}.{} {} {} {}", logPtr(this), - req.version() / 10, req.version() % 10, - req.methodString(), req.target(), - req.ipAddress.to_string()); + req->version() / 10, req->version() % 10, + req->methodString(), req->target(), + req->ipAddress.to_string()); - req.ioService = static_cast<decltype(req.ioService)>( + req->ioService = static_cast<decltype(req->ioService)>( &adaptor.get_executor().context()); if (res.completed) @@ -269,19 +270,19 @@ class Connection : completeRequest(res); return; } - keepAlive = req.keepAlive(); + keepAlive = req->keepAlive(); if constexpr (!std::is_same_v<Adaptor, boost::beast::test::stream>) { #ifndef BMCWEB_INSECURE_DISABLE_AUTHX - if (!crow::authentication::isOnAllowlist(req.url().path(), - req.method()) && - req.session == nullptr) + if (!crow::authentication::isOnAllowlist(req->url().path(), + req->method()) && + req->session == nullptr) { BMCWEB_LOG_WARNING("Authentication failed"); forward_unauthorized::sendUnauthorized( - req.url().encoded_path(), - req.getHeaderValue("X-Requested-With"), - req.getHeaderValue("Accept"), res); + req->url().encoded_path(), + req->getHeaderValue("X-Requested-With"), + req->getHeaderValue("Accept"), res); completeRequest(res); return; } @@ -294,11 +295,11 @@ class Connection : self->completeRequest(thisRes); }); bool isSse = - isContentTypeAllowed(req.getHeaderValue("Accept"), + isContentTypeAllowed(req->getHeaderValue("Accept"), http_helpers::ContentType::EventStream, false); std::string_view upgradeType( - req.getHeaderValue(boost::beast::http::field::upgrade)); - if ((req.isUpgrade() && + req->getHeaderValue(boost::beast::http::field::upgrade)); + if ((req->isUpgrade() && bmcweb::asciiIEquals(upgradeType, "websocket")) || isSse) { @@ -320,7 +321,7 @@ class Connection : return; } std::string_view expected = - req.getHeaderValue(boost::beast::http::field::if_none_match); + req->getHeaderValue(boost::beast::http::field::if_none_match); if (!expected.empty()) { res.setExpectedHash(expected); @@ -371,7 +372,7 @@ class Connection : res = std::move(thisRes); res.keepAlive(keepAlive); - completeResponseFields(req, res); + completeResponseFields(*req, res); res.addHeader(boost::beast::http::field::date, getCachedDateStr()); doWrite(); @@ -515,7 +516,7 @@ class Connection : } std::string_view expect = - req.getHeaderValue(boost::beast::http::field::expect); + parser->get()[boost::beast::http::field::expect]; if (bmcweb::asciiIEquals(expect, "100-continue")) { res.result(boost::beast::http::status::continue_); @@ -644,8 +645,7 @@ class Connection : userSession = nullptr; - // Destroy the Request via the std::optional - req.clear(); + req->clear(); doReadHeaders(); } @@ -732,7 +732,7 @@ class Connection : boost::beast::flat_static_buffer<8192> buffer; - crow::Request req; + std::shared_ptr<crow::Request> req; crow::Response res; std::shared_ptr<persistent_data::UserSession> userSession; |