summaryrefslogtreecommitdiff
path: root/project2/cgi
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2018-04-28 14:24:04 +0100
committerDan Goodliffe <dan@randomdan.homeip.net>2018-04-28 14:24:04 +0100
commit1a7b43c875227527bf180066354f6c3d6515d5cb (patch)
tree7d9364adb554b2bd5f1ea5701be82923e04e0793 /project2/cgi
parentFix throw in destructors (diff)
downloadproject2-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.cpp26
-rw-r--r--project2/cgi/cgiAppEngine.h13
-rw-r--r--project2/cgi/cgiContentNegotiate.cpp8
-rw-r--r--project2/cgi/cgiOutputOptions.cpp2
-rw-r--r--project2/cgi/cgiOutputOptions.h7
-rw-r--r--project2/cgi/cgiProgRouter.cpp18
-rw-r--r--project2/cgi/cgiRouter.h4
-rw-r--r--project2/cgi/cgiStageCacheHit.cpp4
-rw-r--r--project2/cgi/cgiStageDefaultError.cpp10
-rw-r--r--project2/cgi/cgiStageDefaultNotFound.cpp4
-rw-r--r--project2/cgi/cgiStageFail.cpp2
-rw-r--r--project2/cgi/cgiStageInitial.cpp4
-rw-r--r--project2/cgi/cgiStagePresent.cpp28
-rw-r--r--project2/cgi/cgiStageRedirect.cpp6
-rw-r--r--project2/cgi/cgiStageRequest.cpp12
-rw-r--r--project2/cgi/testCgi.cpp7
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()
{