summaryrefslogtreecommitdiff
path: root/project2/cgi
diff options
context:
space:
mode:
authorrandomdan <randomdan@localhost>2011-07-29 23:56:27 +0000
committerrandomdan <randomdan@localhost>2011-07-29 23:56:27 +0000
commite1647e6e2a549da1d8dcf0b25a3181330b828588 (patch)
tree80d9a3643102b77f972e1fd1d15713274c441df0 /project2/cgi
parentWork around old compiler bug by fully qualifying function call to not get mix... (diff)
downloadproject2-e1647e6e2a549da1d8dcf0b25a3181330b828588.tar.bz2
project2-e1647e6e2a549da1d8dcf0b25a3181330b828588.tar.xz
project2-e1647e6e2a549da1d8dcf0b25a3181330b828588.zip
Strip out some useless wrappers
Add support for plugable session containers
Diffstat (limited to 'project2/cgi')
-rw-r--r--project2/cgi/cgiAppEngine.cpp23
-rw-r--r--project2/cgi/cgiAppEngine.h2
-rw-r--r--project2/cgi/cgiEnvironment.cpp2
-rw-r--r--project2/cgi/cgiEnvironment.h1
-rw-r--r--project2/cgi/cgiStageDefaultError.cpp4
-rw-r--r--project2/cgi/cgiStageDefaultNotFound.cpp2
6 files changed, 18 insertions, 16 deletions
diff --git a/project2/cgi/cgiAppEngine.cpp b/project2/cgi/cgiAppEngine.cpp
index ee19331..d601670 100644
--- a/project2/cgi/cgiAppEngine.cpp
+++ b/project2/cgi/cgiAppEngine.cpp
@@ -6,7 +6,6 @@
#include "../logger.h"
#include <boost/bind.hpp>
#include <boost/foreach.hpp>
-#include "../sessionXml.h"
#include "../ostreamWrapper.h"
#include <boost/date_time/microsec_time_clock.hpp>
#include <glibmm/regex.h>
@@ -15,13 +14,12 @@ const std::string SESSIONID = "sessionID";
typedef UUID SIDKey;
typedef std::string SValue;
-SessionContainer * sessionsContainer = new SessionContainerXml();
-
SimpleMessageException(UnknownDomain);
CgiApplicationEngine::CgiApplicationEngine(const CgiEnvironment * e, std::ostream & io) :
ApplicationEngine("web/host"),
_env(e),
+ sessionsContainer(LoaderBase::getLoader<SessionContainerLoader, NotSupported>(e->sessionModule)->open()),
IO(io)
{
BOOST_FOREACH(const cgicc::HTTPCookie c, e->getCookieList()) {
@@ -34,7 +32,6 @@ CgiApplicationEngine::CgiApplicationEngine(const CgiEnvironment * e, std::ostrea
CgiApplicationEngine::~CgiApplicationEngine()
{
- sessionsContainer->CleanUp();
}
const Environment *
@@ -124,20 +121,20 @@ void
CgiApplicationEngine::addEnvData(const Presenter * p) const
{
// These were for debug... but why not pass them on?
- p->addField("servername", env()->getXmlPrefix(), env()->getServerName());
- p->addField("scriptname", env()->getXmlPrefix(), env()->getScriptName());
+ p->addField("servername", env()->xmlPrefix, env()->getServerName());
+ p->addField("scriptname", env()->xmlPrefix, env()->getScriptName());
// URL elements
- p->pushSub("uriElems", env()->getXmlPrefix());
+ p->pushSub("uriElems", env()->xmlPrefix);
BOOST_FOREACH(std::string s, _env->elems) {
- p->addField("uriElem", env()->getXmlPrefix(), s);
+ p->addField("uriElem", env()->xmlPrefix, s);
}
p->popSub();
// Parameters
- p->pushSub("params", env()->getXmlPrefix());
+ p->pushSub("params", env()->xmlPrefix);
BOOST_FOREACH(cgicc::FormEntry fe, _env->cgi->getElements()) {
- p->pushSub("param", env()->getXmlPrefix());
+ p->pushSub("param", env()->xmlPrefix);
p->addAttr("name", fe.getName());
p->addAttr("value", fe.getValue());
p->popSub();
@@ -151,11 +148,11 @@ CgiApplicationEngine::addAppData(const Presenter * p) const
addCoreAppData(p);
// Sessions variables
if (!sessionID.is_nil()) {
- p->pushSub("session", env()->getXmlPrefix());
+ p->pushSub("session", env()->xmlPrefix);
p->addField("id", sessionID.str());
Session::Values session(sessionsContainer->GetSession(sessionID)->GetValuesCopy());
BOOST_FOREACH(Session::Values::value_type sv, session) {
- p->pushSub("var", env()->getXmlPrefix());
+ p->pushSub("var", env()->xmlPrefix);
p->addAttr("value", sv.second);
p->addAttr("name", sv.first);
p->popSub();
@@ -164,7 +161,7 @@ CgiApplicationEngine::addAppData(const Presenter * p) const
}
// Timing info
- p->pushSub("timing", env()->getXmlPrefix());
+ p->pushSub("timing", env()->xmlPrefix);
p->addAttr("start", startTime);
if (!endTime.is_not_a_date_time()) {
p->addAttr("end", endTime);
diff --git a/project2/cgi/cgiAppEngine.h b/project2/cgi/cgiAppEngine.h
index 8482181..2109a31 100644
--- a/project2/cgi/cgiAppEngine.h
+++ b/project2/cgi/cgiAppEngine.h
@@ -10,6 +10,7 @@
#include "../viewHost.h"
#include "../transform.h"
#include "../xmlPresenter.h"
+#include "../sessionContainer.h"
#include <boost/intrusive_ptr.hpp>
#include <boost/tuple/tuple.hpp>
@@ -46,6 +47,7 @@ class CgiApplicationEngine : public ApplicationEngine, public TransformChainLink
mutable DomainPlatforms domplat;
bool checkDomain(const DomainPlatforms::value_type & i) const;
void loadEngineSection(const xmlpp::Element *) const;
+ SessionContainerPtr sessionsContainer;
public:
class Stage;
diff --git a/project2/cgi/cgiEnvironment.cpp b/project2/cgi/cgiEnvironment.cpp
index e88dbc1..1382709 100644
--- a/project2/cgi/cgiEnvironment.cpp
+++ b/project2/cgi/cgiEnvironment.cpp
@@ -57,6 +57,8 @@ CgiEnvironment::addOptions(boost::program_options::positional_options_descriptio
"The present script to use when the requested script (or child) fails")
("dumpdatadoc", boost::program_options::value(&dumpdatadoc),
"Write a copy of the data document before sending it to the web server")
+ ("sessionModule", boost::program_options::value(&sessionModule)->default_value("xml"),
+ "The module with which to implement session management")
;
return cgi;
}
diff --git a/project2/cgi/cgiEnvironment.h b/project2/cgi/cgiEnvironment.h
index abfe78e..db39da8 100644
--- a/project2/cgi/cgiEnvironment.h
+++ b/project2/cgi/cgiEnvironment.h
@@ -37,6 +37,7 @@ class CgiEnvironment : public Environment, public cgicc::CgiEnvironment {
std::string notFoundPresent;
std::string onErrorPresent;
std::string defaultPresenter;
+ std::string sessionModule;
};
#endif
diff --git a/project2/cgi/cgiStageDefaultError.cpp b/project2/cgi/cgiStageDefaultError.cpp
index 767a634..1843905 100644
--- a/project2/cgi/cgiStageDefaultError.cpp
+++ b/project2/cgi/cgiStageDefaultError.cpp
@@ -28,8 +28,8 @@ CgiApplicationEngine::DefaultErrorStage::getHeader() const
CgiApplicationEngine::NextStage
CgiApplicationEngine::DefaultErrorStage::run()
{
- pres->addField("error-type", e->getXmlPrefix(), buf);
- pres->addField("error-what", e->getXmlPrefix(), what.c_str());
+ pres->addField("error-type", e->xmlPrefix, buf);
+ pres->addField("error-what", e->xmlPrefix, what.c_str());
return NextStage(NULL, this, pres.get(), pres.get());
}
diff --git a/project2/cgi/cgiStageDefaultNotFound.cpp b/project2/cgi/cgiStageDefaultNotFound.cpp
index 2e7acb1..8359aa7 100644
--- a/project2/cgi/cgiStageDefaultNotFound.cpp
+++ b/project2/cgi/cgiStageDefaultNotFound.cpp
@@ -22,7 +22,7 @@ CgiApplicationEngine::DefaultNotFoundStage::getHeader() const
CgiApplicationEngine::NextStage
CgiApplicationEngine::DefaultNotFoundStage::run()
{
- pres->addField("missing-resource", e->getXmlPrefix(), nf.what());
+ pres->addField("missing-resource", e->xmlPrefix, nf.what());
return NextStage(NULL, this, pres.get(), pres.get());
}