diff options
| author | Dan Goodliffe <dan@randomdan.homeip.net> | 2018-04-28 14:24:04 +0100 |
|---|---|---|
| committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2018-04-28 14:24:04 +0100 |
| commit | 1a7b43c875227527bf180066354f6c3d6515d5cb (patch) | |
| tree | 7d9364adb554b2bd5f1ea5701be82923e04e0793 /project2/cgi | |
| parent | Fix throw in destructors (diff) | |
| download | project2-1a7b43c875227527bf180066354f6c3d6515d5cb.tar.bz2 project2-1a7b43c875227527bf180066354f6c3d6515d5cb.tar.xz project2-1a7b43c875227527bf180066354f6c3d6515d5cb.zip | |
C++17 and Ice 3.7project2-1.3.0
Updates all code to work with C++17 and Ice 3.7 and related updates in
used libraries.
Diffstat (limited to 'project2/cgi')
| -rw-r--r-- | project2/cgi/cgiAppEngine.cpp | 26 | ||||
| -rw-r--r-- | project2/cgi/cgiAppEngine.h | 13 | ||||
| -rw-r--r-- | project2/cgi/cgiContentNegotiate.cpp | 8 | ||||
| -rw-r--r-- | project2/cgi/cgiOutputOptions.cpp | 2 | ||||
| -rw-r--r-- | project2/cgi/cgiOutputOptions.h | 7 | ||||
| -rw-r--r-- | project2/cgi/cgiProgRouter.cpp | 18 | ||||
| -rw-r--r-- | project2/cgi/cgiRouter.h | 4 | ||||
| -rw-r--r-- | project2/cgi/cgiStageCacheHit.cpp | 4 | ||||
| -rw-r--r-- | project2/cgi/cgiStageDefaultError.cpp | 10 | ||||
| -rw-r--r-- | project2/cgi/cgiStageDefaultNotFound.cpp | 4 | ||||
| -rw-r--r-- | project2/cgi/cgiStageFail.cpp | 2 | ||||
| -rw-r--r-- | project2/cgi/cgiStageInitial.cpp | 4 | ||||
| -rw-r--r-- | project2/cgi/cgiStagePresent.cpp | 28 | ||||
| -rw-r--r-- | project2/cgi/cgiStageRedirect.cpp | 6 | ||||
| -rw-r--r-- | project2/cgi/cgiStageRequest.cpp | 12 | ||||
| -rw-r--r-- | project2/cgi/testCgi.cpp | 7 |
16 files changed, 77 insertions, 78 deletions
diff --git a/project2/cgi/cgiAppEngine.cpp b/project2/cgi/cgiAppEngine.cpp index a69fa9e..7f5195b 100644 --- a/project2/cgi/cgiAppEngine.cpp +++ b/project2/cgi/cgiAppEngine.cpp @@ -36,7 +36,7 @@ std::string CgiApplicationEngine::onErrorPresent; std::string CgiApplicationEngine::defaultPresenter; SessionContainerPtr CgiApplicationEngine::sessionsContainer; std::string CgiApplicationEngine::sessionCookie; -const RouterFactory * CgiApplicationEngine::router; +std::shared_ptr<const RouterFactory> CgiApplicationEngine::router; CgiApplicationEngine::PlatformHostnameList CgiApplicationEngine::platHosts; class PlatformHostnameTarget : public Options::Target { @@ -90,7 +90,7 @@ DECLARE_OPTIONS(CgiApplicationEngine, "Project2 CGI options") "The module with which to implement session management") ("cgi.sessionCookie", Options::value(&sessionCookie, "sessionID"), "The name of the cookie for storing session IDs") -("cgi.hostRegex", new PlatformHostnameTarget(), +("cgi.hostRegex", std::make_shared<PlatformHostnameTarget>(), "Regular expression used to define a hostname -> platform association") ("cgi.router", Options::function([](const VariableType & r) { router = RouterFactory::get(r); }, "simple"), "Implemenation of router model to map request paths to scripts") @@ -111,7 +111,7 @@ finalTransformSource(TransformSourcePtr ts) return ts; } for (const Targets::value_type & t : ts->getTargets()) { - if (TransformSource * tr = dynamic_cast<TransformSource *>(t.first.get())) { + if (auto tr = std::dynamic_pointer_cast<TransformSource>(t.first)) { if (TransformSourcePtr f = finalTransformSource(tr)) { return f; } @@ -128,22 +128,22 @@ CgiApplicationEngine::process(std::ostream & IO, CgiRequestContext * crc) const crc->startTime = boost::date_time::microsec_clock<boost::posix_time::ptime>::universal_time(); bool triedNotFound = false; bool triedOnError = false; - NextStage currentStage = NextStage(new InitialStage()); + NextStage currentStage = NextStage(std::make_shared<InitialStage>()); do { try { currentStage = currentStage.get<0>()->run(crc); } catch (const CheckHost::CheckFailure & cf) { - currentStage = NextStage(new PresentStage(ScriptReader::resolveScript(presentRoot, cf.failedCheck->present(crc), false), crc)); + currentStage = NextStage(std::make_shared<PresentStage>(ScriptReader::resolveScript(presentRoot, cf.failedCheck->present(crc), false), crc)); } catch (const ScriptNotFound & nf) { Logger()->messagebf(LOG_ERR, "%s: Resource not found: %s", __FUNCTION__, nf.what()); if (notFoundPresent.empty() || triedNotFound) { - currentStage = NextStage(new DefaultNotFoundStage(nf)); + currentStage = NextStage(std::make_shared<DefaultNotFoundStage>(nf)); } else { triedNotFound = true; - currentStage = NextStage(new CustomNotFoundStage(nf, ScriptReader::resolveScript(errorPresentRoot, notFoundPresent, false), crc)); + currentStage = NextStage(std::make_shared<CustomNotFoundStage>(nf, ScriptReader::resolveScript(errorPresentRoot, notFoundPresent, false), crc)); } } catch (const std::exception & ex) { @@ -151,11 +151,11 @@ CgiApplicationEngine::process(std::ostream & IO, CgiRequestContext * crc) const Logger()->messagebf(LOG_WARNING, "%s: Error processing stage: %s (what: %s)", __FUNCTION__, buf, ex.what()); free(buf); if (onErrorPresent.empty() || triedOnError) { - currentStage = NextStage(new DefaultErrorStage(ex, crc)); + currentStage = NextStage(std::make_shared<DefaultErrorStage>(ex, crc)); } else { triedNotFound = true; - currentStage = NextStage(new CustomErrorStage(ex, ScriptReader::resolveScript(errorPresentRoot, onErrorPresent, false), crc)); + currentStage = NextStage(std::make_shared<CustomErrorStage>(ex, ScriptReader::resolveScript(errorPresentRoot, onErrorPresent, false), crc)); } } } while (currentStage.get<0>()); @@ -176,12 +176,12 @@ CgiApplicationEngine::process(std::ostream & IO, CgiRequestContext * crc) const TransformSourcePtr final = finalTransformSource(ts); AdHoc::ScopeExit emptyFinal([final] { final->clearTargets(); }); boost::shared_ptr<std::fstream> ddd; - ostreamWrapper * osw = NULL; + std::shared_ptr<ostreamWrapper> osw; AdHoc::ScopeExit removeDdd([ts, &osw] { if (osw) { ts->removeTarget(osw); } }); if (!dumpdatadoc.empty()) { ddd = boost::shared_ptr<std::fstream>(new std::fstream(dumpdatadoc.c_str(), std::fstream::trunc | std::fstream::out)); if (ddd->good()) { - ts->addTarget(osw = new ostreamWrapper(*ddd), crc, NULL); + ts->addTarget(osw = std::make_shared<ostreamWrapper>(*ddd), crc, NULL); } else { ddd.reset(); @@ -197,13 +197,13 @@ CgiApplicationEngine::process(std::ostream & IO, CgiRequestContext * crc) const } if (rs->caches.front()->check(0, crc)) { AdHoc::ScopeExit emptyFinal([rs] { rs->caches.front()->clearTargets(); }); - rs->caches.front()->addTarget(new CgiResult(header, IO, + rs->caches.front()->addTarget(std::make_shared<CgiResult>(header, IO, rs && rs->outputOptions ? rs->outputOptions->Encoding(crc).as<std::string>() : OutputOptions::encoding), crc, NULL); rs->caches.front()->doTransforms(crc); return; } } - final->addTarget(new CgiResult(header, IO, + final->addTarget(std::make_shared<CgiResult>(header, IO, rs && rs->outputOptions ? rs->outputOptions->Encoding(crc).as<std::string>() : OutputOptions::encoding), crc, NULL); ts->doTransforms(crc); } diff --git a/project2/cgi/cgiAppEngine.h b/project2/cgi/cgiAppEngine.h index b9a30d9..3c9ba13 100644 --- a/project2/cgi/cgiAppEngine.h +++ b/project2/cgi/cgiAppEngine.h @@ -10,7 +10,6 @@ #include "xmlPresenter.h" #include "presenterCache.h" #include "sessionContainer.h" -#include <boost/intrusive_ptr.hpp> #include <boost/tuple/tuple.hpp> #include "cgiOutputOptions.h" #include "cgiHttpHeader.h" @@ -27,7 +26,7 @@ namespace cgicc { class DLL_PUBLIC CgiApplicationEngine : AppInstance { public: - typedef boost::shared_ptr<Project2HttpHeader> HttpHeaderPtr; + typedef std::shared_ptr<Project2HttpHeader> HttpHeaderPtr; typedef std::pair<Glib::ustring, Glib::RefPtr<Glib::Regex>> PlatformHostname; typedef std::vector<PlatformHostname> PlatformHostnameList; @@ -53,18 +52,18 @@ class DLL_PUBLIC CgiApplicationEngine : AppInstance { public: class Stage; class ResponseStage; - typedef boost::intrusive_ptr<Stage> StagePtr; - typedef boost::intrusive_ptr<ResponseStage> ResponseStagePtr; + typedef std::shared_ptr<Stage> StagePtr; + typedef std::shared_ptr<ResponseStage> ResponseStagePtr; typedef boost::tuple<StagePtr, ResponseStagePtr, TransformSourcePtr, MultiRowSetPresenterPtr> NextStage; /// Base class for a stage iteration that should eventually produce a response for the client - class Stage : public virtual IntrusivePtrBase { + class Stage { public: virtual ~Stage() = 0; virtual NextStage run(CgiRequestContext *) = 0; }; /// Base class for a stage that can be a response to the client - class ResponseStage : public Stage { + class ResponseStage : public Stage, public std::enable_shared_from_this<ResponseStage> { public: typedef ANONORDEREDSTORAGEOF(PresenterCache) PresenterCaches; @@ -162,7 +161,7 @@ class DLL_PUBLIC CgiApplicationEngine : AppInstance { INITOPTIONS; static PlatformHostnameList platHosts; - static const RouterFactory * router; + static std::shared_ptr<const RouterFactory> router; static SessionContainerPtr sessionsContainer; static std::string sessionCookie; private: diff --git a/project2/cgi/cgiContentNegotiate.cpp b/project2/cgi/cgiContentNegotiate.cpp index beff91c..d72967a 100644 --- a/project2/cgi/cgiContentNegotiate.cpp +++ b/project2/cgi/cgiContentNegotiate.cpp @@ -5,7 +5,7 @@ class ContentNegotiateFactory : public PresenterFactory { public: - MultiRowSetPresenter * create(const ScriptNode * const & s, const ObjectSource & os, ExecContext * const & ec) const override + MultiRowSetPresenterPtr create(std::shared_ptr<const ScriptNode> const & s, const ObjectSource & os, ExecContext * const & ec) const override { auto accept = static_cast<const CgiRequestContext *>(ec)->getAccept(); typedef boost::tokenizer<boost::char_separator<char>> tokenizer; @@ -22,7 +22,7 @@ class ContentNegotiateFactory : public PresenterFactory { } INITOPTIONS; - class MappedType : public IntrusivePtrBase { + class MappedType { public: MappedType(const std::string & val) : accept(val.substr(0, val.find('='))), @@ -38,7 +38,7 @@ class ContentNegotiateFactory : public PresenterFactory { const std::string accept; const std::string present; }; - typedef boost::intrusive_ptr<MappedType> MappedTypePtr; + typedef std::shared_ptr<MappedType> MappedTypePtr; typedef std::vector<MappedTypePtr> MappedTypes; static MappedTypes mappedTypes; @@ -50,7 +50,7 @@ NAMEDPLUGIN("contentnegotiate", ContentNegotiateFactory, PresenterFactory); DECLARE_OPTIONS(ContentNegotiateFactory, "Content negotiation options") ("cgi.contentnegotiation.mappedtype", Options::functions( - [](const VariableType & v) { mappedTypes.push_back(new MappedType(v)); }, + [](const VariableType & v) { mappedTypes.push_back(std::make_shared<MappedType>(v)); }, boost::bind(&MappedTypes::clear, &mappedTypes)), "mimetype=presenter list of types to negotiate") END_OPTIONS(ContentNegotiateFactory) diff --git a/project2/cgi/cgiOutputOptions.cpp b/project2/cgi/cgiOutputOptions.cpp index 56590ff..a199701 100644 --- a/project2/cgi/cgiOutputOptions.cpp +++ b/project2/cgi/cgiOutputOptions.cpp @@ -32,5 +32,5 @@ DECLARE_OPTIONS(OutputOptions, "CGI default output options") END_OPTIONS(OutputOptions) NAMEDFACTORY("outputoptions", OutputOptions, OutputOptionsFactory) -INSTANTIATEFACTORY(OutputOptions, const ScriptNode *); +INSTANTIATEFACTORY(OutputOptions, std::shared_ptr<const ScriptNode>); diff --git a/project2/cgi/cgiOutputOptions.h b/project2/cgi/cgiOutputOptions.h index 75a19b0..55d75c7 100644 --- a/project2/cgi/cgiOutputOptions.h +++ b/project2/cgi/cgiOutputOptions.h @@ -1,11 +1,10 @@ #ifndef OUTPUTOPTIONS_H #define OUTPUTOPTIONS_H -#include "intrusivePtrBase.h" #include "options.h" #include "variables.h" -class DLL_PUBLIC OutputOptions : public IntrusivePtrBase { +class DLL_PUBLIC OutputOptions : public Something { public: OutputOptions(ScriptNodePtr); @@ -29,7 +28,7 @@ class DLL_PUBLIC OutputOptions : public IntrusivePtrBase { static bool url; static bool parameters; }; -typedef boost::intrusive_ptr<OutputOptions> OutputOptionsPtr; -typedef AdHoc::Factory<OutputOptions, const ScriptNode *> OutputOptionsFactory; +typedef std::shared_ptr<OutputOptions> OutputOptionsPtr; +typedef AdHoc::Factory<OutputOptions, std::shared_ptr<const ScriptNode>> OutputOptionsFactory; #endif diff --git a/project2/cgi/cgiProgRouter.cpp b/project2/cgi/cgiProgRouter.cpp index 9993441..983e8cd 100644 --- a/project2/cgi/cgiProgRouter.cpp +++ b/project2/cgi/cgiProgRouter.cpp @@ -16,7 +16,7 @@ typedef std::map<std::string, std::string> VarMap; class RoutingTable { public: class Route; - typedef AdHoc::Factory<RoutingTable::Route, const ScriptNode *> RouteFactory; + typedef AdHoc::Factory<RoutingTable::Route, std::shared_ptr<const ScriptNode>> RouteFactory; void loadRoutesFromFile(const std::string & routeFile) { routeScriptPath = routeFile; @@ -59,11 +59,11 @@ class RoutingTable { throw ScriptNotFound("routed", path); } - class RouteElem : public IntrusivePtrBase { + class RouteElem { public: virtual bool matches(const std::string &, VarMap & vars) const = 0; }; - typedef boost::intrusive_ptr<RouteElem> RouteElemPtr; + typedef std::shared_ptr<RouteElem> RouteElemPtr; class RouteLiteral : public RouteElem { public: @@ -97,10 +97,10 @@ class RoutingTable { while(p != fspath.end() && p->string() != ".") { switch (p->string().front()) { case '{': - routeElems.push_back(new RouteVar(p->string())); + routeElems.push_back(std::make_shared<RouteVar>(p->string())); break; default: - routeElems.push_back(new RouteLiteral(p->string())); + routeElems.push_back(std::make_shared<RouteLiteral>(p->string())); break; } p++; @@ -122,7 +122,7 @@ class RoutingTable { const std::string present; const std::string path; }; - typedef boost::intrusive_ptr<Route> RoutePtr; + typedef std::shared_ptr<Route> RoutePtr; std::list<RoutePtr> routes; }; @@ -202,8 +202,8 @@ class Routes : public RowSet { class RouteRowState : public RowState { public: RouteRowState() { - columns.insert(new Column(0, "present")); - columns.insert(new Column(1, "path")); + columns.insert(std::make_shared<Column>(0, "present")); + columns.insert(std::make_shared<Column>(1, "path")); fields.resize(2); } const Columns & getColumns() const { return columns; } @@ -224,5 +224,5 @@ class Routes : public RowSet { }; NAMEDFACTORY("routes", Routes, RowSetFactory); -INSTANTIATEFACTORY(RoutingTable::Route, const ScriptNode *); +INSTANTIATEFACTORY(RoutingTable::Route, std::shared_ptr<const ScriptNode>); diff --git a/project2/cgi/cgiRouter.h b/project2/cgi/cgiRouter.h index 5417bce..7c9137e 100644 --- a/project2/cgi/cgiRouter.h +++ b/project2/cgi/cgiRouter.h @@ -7,7 +7,7 @@ class MultiRowSetPresenter; -class DLL_PUBLIC Router : public IntrusivePtrBase { +class DLL_PUBLIC Router { public: virtual bool isDefault() const = 0; virtual std::string route() const = 0; @@ -15,7 +15,7 @@ class DLL_PUBLIC Router : public IntrusivePtrBase { virtual unsigned int parameterCount() const = 0; virtual void present(const MultiRowSetPresenter * p) const = 0; }; -typedef boost::intrusive_ptr<Router> RouterPtr; +typedef std::shared_ptr<Router> RouterPtr; typedef AdHoc::Factory<Router, const std::string &> RouterFactory; #endif diff --git a/project2/cgi/cgiStageCacheHit.cpp b/project2/cgi/cgiStageCacheHit.cpp index 3a6a665..a069dc8 100644 --- a/project2/cgi/cgiStageCacheHit.cpp +++ b/project2/cgi/cgiStageCacheHit.cpp @@ -13,12 +13,12 @@ CgiApplicationEngine::CacheHitStage::CacheHitStage(ScriptNodePtr s, PresenterCac CgiApplicationEngine::NextStage CgiApplicationEngine::CacheHitStage::run(CgiRequestContext *) { - return NextStage(NULL, this, pc, NULL); + return NextStage(NULL, shared_from_this(), pc, NULL); } CgiApplicationEngine::HttpHeaderPtr CgiApplicationEngine::CacheHitStage::getHeader(CgiRequestContext *) const { - return HttpHeaderPtr(new Project2HttpHeader("200 OK")); + return std::make_shared<Project2HttpHeader>("200 OK"); } diff --git a/project2/cgi/cgiStageDefaultError.cpp b/project2/cgi/cgiStageDefaultError.cpp index f932f78..f4c1df9 100644 --- a/project2/cgi/cgiStageDefaultError.cpp +++ b/project2/cgi/cgiStageDefaultError.cpp @@ -11,12 +11,12 @@ CgiApplicationEngine::DefaultErrorStage::DefaultErrorStage(const std::exception CgiApplicationEngine::ResponseStage(NULL), buf(__cxxabiv1::__cxa_demangle(typeid(ex).name(), NULL, NULL, NULL)), what(ex.what()), - pres(new XmlPresenter(DefaultErrorStageResp, CgiApplicationEngine::errorTransformStyle, CgiApplicationEngine::errorContentType)) + pres(std::make_shared<XmlPresenter>(DefaultErrorStageResp, CgiApplicationEngine::errorTransformStyle, CgiApplicationEngine::errorContentType)) { - auto xp = dynamic_cast<TransformSource *>(pres.get()); - auto cp = dynamic_cast<ContentPresenter *>(pres.get()); + auto xp = std::dynamic_pointer_cast<TransformSource>(pres); + auto cp = std::dynamic_pointer_cast<ContentPresenter>(pres); if (xp && cp && cp->contentType == CgiApplicationEngine::transformContentType) { - auto h = TransformTargetFactory::createNew(CgiApplicationEngine::transformTargetType, root.get(), Default); + auto h = TransformTargetFactory::createNew(CgiApplicationEngine::transformTargetType, root, Default); xp->addTarget(h, crc, root); } } @@ -38,6 +38,6 @@ CgiApplicationEngine::DefaultErrorStage::run(CgiRequestContext * crc) pres->init(crc); pres->addNamedValue("error-type", Scripts::scriptNamespacePrefix, buf); pres->addNamedValue("error-what", Scripts::scriptNamespacePrefix, what.c_str()); - return NextStage(NULL, this, pres.get(), pres.get()); + return NextStage(NULL, shared_from_this(), pres, pres); } diff --git a/project2/cgi/cgiStageDefaultNotFound.cpp b/project2/cgi/cgiStageDefaultNotFound.cpp index ad4c697..c6b6f1e 100644 --- a/project2/cgi/cgiStageDefaultNotFound.cpp +++ b/project2/cgi/cgiStageDefaultNotFound.cpp @@ -16,7 +16,7 @@ CgiApplicationEngine::DefaultNotFoundStage::DefaultNotFoundStage(const ScriptNot CgiApplicationEngine::HttpHeaderPtr CgiApplicationEngine::DefaultNotFoundStage::getHeader(CgiRequestContext *) const { - return HttpHeaderPtr(new Project2HttpHeader("404 Not found")); + return std::make_shared<Project2HttpHeader>("404 Not found"); } CgiApplicationEngine::NextStage @@ -24,6 +24,6 @@ CgiApplicationEngine::DefaultNotFoundStage::run(CgiRequestContext * crc) { pres->init(crc); pres->addNamedValue("missing-resource", Scripts::scriptNamespacePrefix, nf.what()); - return NextStage(NULL, this, pres.get(), pres.get()); + return NextStage(NULL, shared_from_this(), pres, pres); } diff --git a/project2/cgi/cgiStageFail.cpp b/project2/cgi/cgiStageFail.cpp index e96f14f..a111a96 100644 --- a/project2/cgi/cgiStageFail.cpp +++ b/project2/cgi/cgiStageFail.cpp @@ -22,7 +22,7 @@ namespace CgiApplicationExtras { CgiApplicationEngine::NextStage run(CgiRequestContext *) { - return CgiApplicationEngine::NextStage(NULL, this, NULL, NULL); + return CgiApplicationEngine::NextStage(NULL, shared_from_this(), NULL, NULL); } private: const int code; diff --git a/project2/cgi/cgiStageInitial.cpp b/project2/cgi/cgiStageInitial.cpp index 1326af8..dbc58fd 100644 --- a/project2/cgi/cgiStageInitial.cpp +++ b/project2/cgi/cgiStageInitial.cpp @@ -7,11 +7,11 @@ CgiApplicationEngine::NextStage CgiApplicationEngine::InitialStage::run(CgiRequestContext * crc) { if (crc->getRequestMethod() == "POST") { - return NextStage(new RequestStage(ScriptReader::resolveScript(CgiApplicationEngine::requestRoot, + return NextStage(std::make_shared<RequestStage>(ScriptReader::resolveScript(CgiApplicationEngine::requestRoot, crc->router->route(), false))); } else { - return NextStage(new PresentStage(ScriptReader::resolveScript(CgiApplicationEngine::presentRoot, + return NextStage(std::make_shared<PresentStage>(ScriptReader::resolveScript(CgiApplicationEngine::presentRoot, crc->router->isDefault() ? CgiApplicationEngine::defaultPresent : crc->router->route(), false), crc)); } } diff --git a/project2/cgi/cgiStagePresent.cpp b/project2/cgi/cgiStagePresent.cpp index 04fae92..33f0298 100644 --- a/project2/cgi/cgiStagePresent.cpp +++ b/project2/cgi/cgiStagePresent.cpp @@ -11,11 +11,11 @@ CgiApplicationEngine::PresentStage::PresentStage(ScriptReaderPtr s, CgiRequestCo CheckHost(s->root()), ViewHost(s->root()), presenter([this, crc] { - auto p = PresenterFactory::createNew(CgiApplicationEngine::defaultPresenter, root.get(), Default, crc); - auto xp = dynamic_cast<TransformSource *>(p); - auto cp = dynamic_cast<ContentPresenter *>(p); + auto p = PresenterFactory::createNew(CgiApplicationEngine::defaultPresenter, root, Default, crc); + auto xp = std::dynamic_pointer_cast<TransformSource>(p); + auto cp = std::dynamic_pointer_cast<ContentPresenter>(p); if (xp && cp && cp->contentType == CgiApplicationEngine::transformContentType) { - auto h = TransformTargetFactory::createNew(CgiApplicationEngine::transformTargetType, root.get(), Default); + auto h = TransformTargetFactory::createNew(CgiApplicationEngine::transformTargetType, root, Default); xp->addTarget(h, crc, root); } return p; @@ -34,12 +34,12 @@ CgiApplicationEngine::PresentStage::run(CgiRequestContext * crc) time_t reqMS = crc->getRequestModifiedSince(); CgiRequestContext::ETags etags = crc->getRequestETags(); for (const PresenterCachePtr & pc : caches) { - if (pc->check(root->script->modifiedTime(), crc)) { + if (pc->check(root->script.lock()->modifiedTime(), crc)) { if (reqMS >= pc->getModifiedTime() && (etags.empty() || AdHoc::containerContains(etags, pc->getSHA1()))) { - header = HttpHeaderPtr(new Project2HttpHeader("304 Not Modified")); - return NextStage(NULL, this, NULL, NULL); + header = std::make_shared<Project2HttpHeader>("304 Not Modified"); + return NextStage(NULL, shared_from_this(), NULL, NULL); } - CacheHitStage * chs = new CacheHitStage(root, pc); + auto chs = std::make_shared<CacheHitStage>(root, pc); chs->caches = backFill; return NextStage(NULL, chs, pc, NULL); } @@ -49,18 +49,18 @@ CgiApplicationEngine::PresentStage::run(CgiRequestContext * crc) } try { executeViews(crc); - header = HttpHeaderPtr(new Project2HttpHeader("200 OK")); - return NextStage(NULL, this, boost::dynamic_pointer_cast<TransformSource>(presenter), presenter); + header = std::make_shared<Project2HttpHeader>("200 OK"); + return NextStage(NULL, shared_from_this(), std::dynamic_pointer_cast<TransformSource>(presenter.deref()), presenter); } catch (EmptyRequiredRows) { - header = HttpHeaderPtr(new Project2HttpHeader("404 Not found")); - return NextStage(NULL, this, boost::dynamic_pointer_cast<TransformSource>(presenter), presenter); + header = std::make_shared<Project2HttpHeader>("404 Not found"); + return NextStage(NULL, shared_from_this(), std::dynamic_pointer_cast<TransformSource>(presenter.deref()), presenter); } catch (ResponseStagePtr & p) { - return NextStage(NULL, p, boost::dynamic_pointer_cast<TransformSource>(p), boost::dynamic_pointer_cast<Presenter>(p)); + return NextStage(NULL, p, std::dynamic_pointer_cast<TransformSource>(p), std::dynamic_pointer_cast<Presenter>(p)); } catch (StagePtr & p) { - return NextStage(p, NULL, boost::dynamic_pointer_cast<TransformSource>(p), boost::dynamic_pointer_cast<Presenter>(p)); + return NextStage(p, NULL, std::dynamic_pointer_cast<TransformSource>(p), std::dynamic_pointer_cast<Presenter>(p)); } } diff --git a/project2/cgi/cgiStageRedirect.cpp b/project2/cgi/cgiStageRedirect.cpp index 18de9f9..ba9e37d 100644 --- a/project2/cgi/cgiStageRedirect.cpp +++ b/project2/cgi/cgiStageRedirect.cpp @@ -14,14 +14,14 @@ namespace CgiApplicationExtras { CgiApplicationEngine::HttpHeaderPtr getHeader(CgiRequestContext *) const { - Project2HttpHeader * header = new Project2HttpHeader("301 Moved Permanently"); + auto header = std::make_shared<Project2HttpHeader>("301 Moved Permanently"); header->addHeader("Location", url); return CgiApplicationEngine::HttpHeaderPtr(header); } CgiApplicationEngine::NextStage run(CgiRequestContext *) { - return CgiApplicationEngine::NextStage(NULL, this, NULL, NULL); + return CgiApplicationEngine::NextStage(NULL, shared_from_this(), NULL, NULL); } private: const std::string url; @@ -35,7 +35,7 @@ namespace CgiApplicationExtras { url(e, "url") { } void execute(const MultiRowSetPresenter *, ExecContext * ec) const { - throw CgiApplicationEngine::ResponseStagePtr(new RedirectStage(url(ec))); + throw std::make_shared<RedirectStage>(url(ec)); } private: Variable url; diff --git a/project2/cgi/cgiStageRequest.cpp b/project2/cgi/cgiStageRequest.cpp index 1cf03c9..d58cf38 100644 --- a/project2/cgi/cgiStageRequest.cpp +++ b/project2/cgi/cgiStageRequest.cpp @@ -21,23 +21,23 @@ CgiApplicationEngine::RequestStage::run(CgiRequestContext * ec) runChecks(ec); execute(ec); if (!present(ec).isNull()) { - return NextStage(new PresentStage(ScriptReader::resolveScript(CgiApplicationEngine::presentRoot, present(ec), false), ec), this); + return NextStage(std::make_shared<PresentStage>(ScriptReader::resolveScript(CgiApplicationEngine::presentRoot, present(ec), false), ec), shared_from_this()); } - return NextStage(NULL, this); + return NextStage(NULL, shared_from_this()); } CgiApplicationEngine::HttpHeaderPtr CgiApplicationEngine::RequestStage::getHeader(CgiRequestContext * ec) const { - Project2HttpHeader * header; + HttpHeaderPtr header; if (redirect(ec).isNull()) { - header = new Project2HttpHeader("200 OK"); + header = std::make_shared<Project2HttpHeader>("200 OK"); } else { - header = new Project2HttpHeader("301 Moved Permanently"); + header = std::make_shared<Project2HttpHeader>("301 Moved Permanently"); header->addHeader("Location", redirect(ec)); } header->addHeader("Cache-control", "no-cache"); - return HttpHeaderPtr(header); + return header; } diff --git a/project2/cgi/testCgi.cpp b/project2/cgi/testCgi.cpp index 7f9df28..b1a5a3b 100644 --- a/project2/cgi/testCgi.cpp +++ b/project2/cgi/testCgi.cpp @@ -29,9 +29,10 @@ class TestInput : public cgicc::CgiInput, public CgiEnvInput { typedef std::map<std::string, StrPtr> OptStore; TestInput(int argc, char ** argv) { - AdHoc::PluginManager::getDefault()->add<OptionsSource>(new FileOptions(".testCgi.settings"), "_1", __FILE__, __LINE__); - AdHoc::PluginManager::getDefault()->add<OptionsSource>( - new CommandLineArguments(argc, argv, [](const char * url) { urls.push_back(url); }), "_2", __FILE__, __LINE__); + AdHoc::PluginManager::getDefault()->create<OptionsSource, FileOptions>( + "_1", __FILE__, __LINE__, ".testCgi.settings"); + AdHoc::PluginManager::getDefault()->create<OptionsSource, CommandLineArguments>( + "_2", __FILE__, __LINE__, argc, argv, [](const char * url) { urls.push_back(url); }); } ~TestInput() { |
