From f8184a8ca59ea3de55474b08b1dd349ad4adee2b Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Thu, 27 Jul 2023 02:30:15 +0100 Subject: Simplified setup of CgiRequestBase No need to call initialise() now all the environment data is passed to the constructor --- icespider/fcgi/cgiRequest.cpp | 1 - icespider/fcgi/cgiRequestBase.cpp | 28 +++++++++------------------- icespider/fcgi/cgiRequestBase.h | 4 +--- icespider/fcgi/fcgiRequest.cpp | 1 - icespider/unittests/testFcgi.cpp | 10 ++-------- icespider/unittests/testPerf.cpp | 5 +---- 6 files changed, 13 insertions(+), 36 deletions(-) diff --git a/icespider/fcgi/cgiRequest.cpp b/icespider/fcgi/cgiRequest.cpp index 6dd5391..2692d07 100644 --- a/icespider/fcgi/cgiRequest.cpp +++ b/icespider/fcgi/cgiRequest.cpp @@ -6,7 +6,6 @@ namespace IceSpider { CgiRequest::CgiRequest(Core * c, int argc, char ** argv, char ** env) : CgiRequestBase(c, EnvNTL {env}, EnvArray {argv, static_cast(argc)}) { - initialize(); } std::istream & diff --git a/icespider/fcgi/cgiRequestBase.cpp b/icespider/fcgi/cgiRequestBase.cpp index a403317..844a3db 100644 --- a/icespider/fcgi/cgiRequestBase.cpp +++ b/icespider/fcgi/cgiRequestBase.cpp @@ -33,23 +33,6 @@ namespace IceSpider { CGI_CONST(HTTP_COOKIE); CGI_CONST(REQUEST_METHOD); - CgiRequestBase::CgiRequestBase(Core * c, const EnvArray envs, const EnvArray extra) : IHttpRequest(c) - { - for (const auto & envdata : {envs, extra}) { - for (const auto & e : envdata) { - addenv(e); - } - } - } - - void - CgiRequestBase::addenv(const std::string_view e) - { - if (const auto eq = e.find('='); eq != std::string_view::npos) { - envmap.insert({e.substr(0, eq), e.substr(eq + 1)}); - } - } - template inline void mapVars(const std::string_view & vn, const in & envmap, out & map, const std::string_view & sp) @@ -78,9 +61,16 @@ namespace IceSpider { throw Ex(); } - void - CgiRequestBase::initialize() + CgiRequestBase::CgiRequestBase(Core * c, const EnvArray envs, const EnvArray extra) : IHttpRequest(c) { + for (const auto & envdata : {envs, extra}) { + for (const std::string_view e : envdata) { + if (const auto eq = e.find('='); eq != std::string_view::npos) { + envmap.insert({e.substr(0, eq), e.substr(eq + 1)}); + } + } + } + if (auto path = findFirstOrElse(envmap, REDIRECT_URL, SCRIPT_NAME).substr(1); // NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks) !path.empty()) { diff --git a/icespider/fcgi/cgiRequestBase.h b/icespider/fcgi/cgiRequestBase.h index 1d91ea4..4053f0c 100644 --- a/icespider/fcgi/cgiRequestBase.h +++ b/icespider/fcgi/cgiRequestBase.h @@ -1,8 +1,8 @@ #pragma once -#include "http.h" #include #include +#include #include #include #include @@ -21,8 +21,6 @@ namespace IceSpider { using EnvNTL = std::basic_string_view; CgiRequestBase(Core * c, const EnvArray envs, const EnvArray extra = {}); - void addenv(const std::string_view); - void initialize(); public: using VarMap = flatmap; diff --git a/icespider/fcgi/fcgiRequest.cpp b/icespider/fcgi/fcgiRequest.cpp index 2c467a7..fb56728 100644 --- a/icespider/fcgi/fcgiRequest.cpp +++ b/icespider/fcgi/fcgiRequest.cpp @@ -4,7 +4,6 @@ namespace IceSpider { FcgiRequest::FcgiRequest(Core * c, FCGX_Request * r) : CgiRequestBase(c, EnvNTL {r->envp}), inputbuf(r->in), input(&inputbuf), outputbuf(r->out), output(&outputbuf) { - initialize(); } std::istream & diff --git a/icespider/unittests/testFcgi.cpp b/icespider/unittests/testFcgi.cpp index 591ce78..d461c84 100644 --- a/icespider/unittests/testFcgi.cpp +++ b/icespider/unittests/testFcgi.cpp @@ -53,10 +53,7 @@ namespace std { class TestRequest : public IceSpider::CgiRequestBase { public: - TestRequest(IceSpider::Core * c, const EnvArray env) : IceSpider::CgiRequestBase(c, env) - { - initialize(); - } + TestRequest(IceSpider::Core * c, const EnvArray env) : IceSpider::CgiRequestBase(c, env) { } std::ostream & getOutputStream() const override @@ -79,10 +76,7 @@ public: class TestPayloadRequest : public TestRequest { public: - TestPayloadRequest(IceSpider::Core * c, const EnvArray env, std::istream & s) : TestRequest(c, env), in(s) - { - initialize(); - } + TestPayloadRequest(IceSpider::Core * c, const EnvArray env, std::istream & s) : TestRequest(c, env), in(s) { } std::istream & getInputStream() const override diff --git a/icespider/unittests/testPerf.cpp b/icespider/unittests/testPerf.cpp index 91ce437..1c7aed4 100644 --- a/icespider/unittests/testPerf.cpp +++ b/icespider/unittests/testPerf.cpp @@ -8,10 +8,7 @@ class TestRequest : public IceSpider::CgiRequestBase { public: - TestRequest(IceSpider::Core * c, const EnvArray env) : IceSpider::CgiRequestBase(c, env) - { - initialize(); - } + TestRequest(IceSpider::Core * c, const EnvArray env) : IceSpider::CgiRequestBase(c, env) { } std::ostream & getOutputStream() const override -- cgit v1.2.3