summaryrefslogtreecommitdiff
path: root/project2/cgi/cgiAppEngine.h
diff options
context:
space:
mode:
Diffstat (limited to 'project2/cgi/cgiAppEngine.h')
-rw-r--r--project2/cgi/cgiAppEngine.h92
1 files changed, 50 insertions, 42 deletions
diff --git a/project2/cgi/cgiAppEngine.h b/project2/cgi/cgiAppEngine.h
index f5f0e08..6d3cd0c 100644
--- a/project2/cgi/cgiAppEngine.h
+++ b/project2/cgi/cgiAppEngine.h
@@ -1,7 +1,6 @@
#ifndef CGIAPPENGINE_H
#define CGIAPPENGINE_H
-#include "appEngine.h"
#include "task.h"
#include "commonObjects.h"
#include "taskHost.h"
@@ -15,7 +14,7 @@
#include <boost/tuple/tuple.hpp>
#include "cgiOutputOptions.h"
#include "cgiHttpHeader.h"
-#include "cgiEnvironment.h"
+#include "cgiRequestContext.h"
#include <cgicc/Cgicc.h>
class Session;
@@ -24,29 +23,26 @@ namespace cgicc {
class CgiEnvironment;
}
-class CgiApplicationEngine : public ApplicationEngine, public TransformChainLink {
+class CgiApplicationEngine {
public:
typedef boost::shared_ptr<Project2HttpHeader> HttpHeaderPtr;
- CgiApplicationEngine(const CgiEnvironment *, std::ostream &);
+ CgiApplicationEngine();
virtual ~CgiApplicationEngine();
- void process() const;
- const CgiEnvironment * env() const;
- SessionPtr session() const;
- void addAppData(const MultiRowSetPresenter * p, OutputOptionsPtr) const;
- void addEnvData(const MultiRowSetPresenter * p, OutputOptionsPtr) const;
+ void process(std::ostream & IO, CgiRequestContext *) const;
private:
- const CgiEnvironment * _env;
- mutable boost::posix_time::ptime startTime;
- mutable boost::posix_time::ptime endTime;
- SessionContainerPtr sessionsContainer;
+ void processRun(std::ostream & IO, CgiRequestContext *) const;
+ void addAppData(const MultiRowSetPresenter * p, OutputOptionsPtr o, CgiRequestContext *, bool) const;
+ void addEnvData(const MultiRowSetPresenter * p, OutputOptionsPtr o, CgiRequestContext *, bool) const;
+
// Helpers
+ //
void addVarToPresenter(const MultiRowSetPresenter * p, const Glib::ustring & name, const VariableType &) const;
template <class X, class Y>
- void addEnvToPresenter(const MultiRowSetPresenter * p, const char * name, X (Y::*getter)() const) const {
- addVarToPresenter(p, name, (_env->cgi->getEnvironment().*getter)());
+ void addEnvToPresenter(const MultiRowSetPresenter * p, const char * name, X (Y::*getter)() const, CgiRequestContext * crc) const {
+ addVarToPresenter(p, name, (crc->cgi.getEnvironment().*getter)());
}
public:
@@ -59,9 +55,7 @@ class CgiApplicationEngine : public ApplicationEngine, public TransformChainLink
class Stage : public virtual IntrusivePtrBase {
public:
virtual ~Stage() = 0;
- virtual NextStage run() = 0;
- protected:
- const CgiEnvironment * env() const;
+ virtual NextStage run(CgiRequestContext *) = 0;
};
/// Base class for a stage that can be a response to the client
@@ -70,7 +64,7 @@ class CgiApplicationEngine : public ApplicationEngine, public TransformChainLink
typedef ANONORDEREDSTORAGEOF(PresenterCache) PresenterCaches;
ResponseStage(ScriptNodePtr root);
- virtual HttpHeaderPtr getHeader() const = 0;
+ virtual HttpHeaderPtr getHeader(CgiRequestContext *) const = 0;
OutputOptionsPtr outputOptions;
ScriptNodePtr root;
@@ -80,7 +74,7 @@ class CgiApplicationEngine : public ApplicationEngine, public TransformChainLink
/// Stage implementation used to bootstrap the iteration process based on the CGI environment
class InitialStage : public Stage {
public:
- virtual NextStage run();
+ virtual NextStage run(CgiRequestContext *);
};
/// Stage to process POST requests
@@ -88,8 +82,8 @@ class CgiApplicationEngine : public ApplicationEngine, public TransformChainLink
public:
RequestStage(ScriptReaderPtr);
- virtual NextStage run();
- virtual HttpHeaderPtr getHeader() const;
+ virtual NextStage run(CgiRequestContext *);
+ virtual HttpHeaderPtr getHeader(CgiRequestContext *) const;
protected:
Variable present;
Variable redirect;
@@ -98,11 +92,11 @@ class CgiApplicationEngine : public ApplicationEngine, public TransformChainLink
/// Stage to process GET requests and follow up RequestStages
class PresentStage : public virtual ResponseStage, ViewHost {
public:
- PresentStage(ScriptReaderPtr);
- MultiRowSetPresenterPtr getPresenter() const;
+ PresentStage(ScriptReaderPtr, CgiRequestContext *);
+ MultiRowSetPresenterPtr getPresenter(ExecContext *) const;
- virtual NextStage run();
- virtual HttpHeaderPtr getHeader() const;
+ virtual NextStage run(CgiRequestContext *);
+ virtual HttpHeaderPtr getHeader(CgiRequestContext *) const;
protected:
HttpHeaderPtr header;
LazyPointer<MultiRowSetPresenter> presenter;
@@ -113,8 +107,8 @@ class CgiApplicationEngine : public ApplicationEngine, public TransformChainLink
public:
CacheHitStage(ScriptNodePtr, PresenterCachePtr);
- virtual NextStage run();
- virtual HttpHeaderPtr getHeader() const;
+ virtual NextStage run(CgiRequestContext *);
+ virtual HttpHeaderPtr getHeader(CgiRequestContext *) const;
protected:
PresenterCachePtr pc;
};
@@ -124,8 +118,8 @@ class CgiApplicationEngine : public ApplicationEngine, public TransformChainLink
public:
DefaultNotFoundStage(const ScriptNotFound &);
- virtual NextStage run();
- virtual HttpHeaderPtr getHeader() const;
+ virtual NextStage run(CgiRequestContext *);
+ virtual HttpHeaderPtr getHeader(CgiRequestContext *) const;
private:
const ScriptNotFound nf;
XmlPresenterPtr pres;
@@ -134,19 +128,19 @@ class CgiApplicationEngine : public ApplicationEngine, public TransformChainLink
/// Custom not found handling stage
class CustomNotFoundStage : public DefaultNotFoundStage, public PresentStage {
public:
- CustomNotFoundStage(const ScriptNotFound &, ScriptReaderPtr);
- virtual NextStage run();
- virtual HttpHeaderPtr getHeader() const;
+ CustomNotFoundStage(const ScriptNotFound &, ScriptReaderPtr, CgiRequestContext *);
+ virtual NextStage run(CgiRequestContext *);
+ virtual HttpHeaderPtr getHeader(CgiRequestContext *) const;
};
/// The built-in fail-safe unhandled error stage
class DefaultErrorStage : public virtual ResponseStage {
public:
- DefaultErrorStage(const std::exception &);
+ DefaultErrorStage(const std::exception &, CgiRequestContext *);
~DefaultErrorStage();
- virtual NextStage run();
- virtual HttpHeaderPtr getHeader() const;
+ virtual NextStage run(CgiRequestContext *);
+ virtual HttpHeaderPtr getHeader(CgiRequestContext *) const;
private:
char * buf;
std::string what;
@@ -156,15 +150,29 @@ class CgiApplicationEngine : public ApplicationEngine, public TransformChainLink
/// Custom unhandled error handling stage
class CustomErrorStage : public DefaultErrorStage, public PresentStage {
public:
- CustomErrorStage(const std::exception &, ScriptReaderPtr);
- virtual NextStage run();
- virtual HttpHeaderPtr getHeader() const;
+ CustomErrorStage(const std::exception &, ScriptReaderPtr, CgiRequestContext *);
+ virtual NextStage run(CgiRequestContext *);
+ virtual HttpHeaderPtr getHeader(CgiRequestContext *) const;
};
+ INITOPTIONS;
+ static boost::intrusive_ptr<HostnamePlatformIdentifier> hpi;
+ static boost::shared_ptr<RouterLoader> router;
+ static SessionContainerPtr sessionsContainer;
+ static std::string sessionCookie;
private:
- SessionPtr cursession;
- std::ostream & IO;
- mutable bool outputCachingActive;
+ static std::string dumpdatadoc;
+ static Glib::ustring errorContentType;
+ static Glib::ustring errorTransformStyle;
+ static std::string defaultPresent;
+ static std::string transformContentType;
+ static std::string transformTargetType;
+ static std::string presentRoot;
+ static std::string requestRoot;
+ static std::string errorPresentRoot;
+ static std::string notFoundPresent;
+ static std::string onErrorPresent;
+ static std::string defaultPresenter;
};
#endif