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.h78
1 files changed, 55 insertions, 23 deletions
diff --git a/project2/cgi/cgiAppEngine.h b/project2/cgi/cgiAppEngine.h
index cfab7c4..de9b95a 100644
--- a/project2/cgi/cgiAppEngine.h
+++ b/project2/cgi/cgiAppEngine.h
@@ -47,19 +47,29 @@ class CgiApplicationEngine : public ApplicationEngine {
class Stage;
typedef boost::intrusive_ptr<Stage> StagePtr;
+ /// Base class for a stage iteration that should eventually produce a response for the client
class Stage : public virtual CommonObjects {
public:
- Stage();
+ Stage(const CgiEnvironment * e);
virtual ~Stage() = 0;
virtual StagePtr run() = 0;
- virtual XmlDocPtr getDataDocument() const = 0;
- virtual HttpHeaderPtr getHeader() const = 0;
+ virtual XmlDocPtr getDataDocument() const;
+ virtual HttpHeaderPtr getHeader() const;
+ protected:
+ const CgiEnvironment * e;
+ };
+
+ /// Stage implementation used to bootstrap the iteration process based on the CGI environment
+ class InitialStage : public Stage {
+ public:
+ InitialStage(const CgiEnvironment * e);
+ virtual StagePtr run();
};
+ /// Stage to process POST requests
class RequestStage : public Stage, public XmlPresenter, RequestHost {
public:
- RequestStage(const std::string & id);
- virtual ~RequestStage();
+ RequestStage(const CgiEnvironment *, const std::string & id);
virtual StagePtr run();
virtual XmlDocPtr getDataDocument() const;
@@ -77,51 +87,73 @@ class CgiApplicationEngine : public ApplicationEngine {
static const Glib::ustring style;
};
- class PresentStage : public Stage, public XmlProcessPresenter {
+ /// Stage to process GET requests and follow up RequestStages
+ class PresentStage : public virtual Stage, public XmlProcessPresenter {
public:
- PresentStage(const std::string & id);
- virtual ~PresentStage();
+ PresentStage(const CgiEnvironment * e, const std::string & id);
+ PresentStage(const CgiEnvironment * e, const std::string & group, const std::string & id);
virtual StagePtr run();
virtual XmlDocPtr getDataDocument() const;
virtual HttpHeaderPtr getHeader() const;
};
- class FailStage : public Stage, public XmlPresenter {
+ /// The built-in fail-safe not found stage
+ class DefaultNotFoundStage : public virtual Stage, public XmlPresenter {
public:
- FailStage(const CgiEnvironment *);
- virtual ~FailStage();
+ DefaultNotFoundStage(const CgiEnvironment *, const XmlScriptParser::NotFound &);
- virtual const Glib::ustring & getResponseStyle() const;
+ virtual XmlDocPtr getDataDocument() const;
+ virtual HttpHeaderPtr getHeader() const;
virtual StagePtr run();
+ virtual const Glib::ustring & getResponseRootNodeName() const;
+ virtual const Glib::ustring & getResponseStyle() const;
+ private:
+ static const Glib::ustring resp;
+ const CgiEnvironment * e;
+ const XmlScriptParser::NotFound nf;
+ };
- protected:
- const CgiEnvironment * env;
+ /// Custom not found handling stage
+ class CustomNotFoundStage : public DefaultNotFoundStage, public PresentStage {
+ public:
+ CustomNotFoundStage(const CgiEnvironment *, const XmlScriptParser::NotFound &);
+ virtual StagePtr run();
+ virtual XmlDocPtr getDataDocument() const;
+ virtual HttpHeaderPtr getHeader() const;
+ virtual const Glib::ustring & getResponseRootNodeName() const;
+ virtual const Glib::ustring & getResponseStyle() const;
};
- class NotFoundStage : public FailStage {
+ /// The built-in fail-safe unhandled error stage
+ class DefaultErrorStage : public virtual Stage, public XmlPresenter {
public:
- NotFoundStage(const CgiEnvironment *, const XmlScriptParser::NotFound &);
- virtual ~NotFoundStage();
+ DefaultErrorStage(const CgiEnvironment *, const std::exception &);
+ ~DefaultErrorStage();
virtual XmlDocPtr getDataDocument() const;
virtual HttpHeaderPtr getHeader() const;
+ virtual StagePtr run();
virtual const Glib::ustring & getResponseRootNodeName() const;
+ virtual const Glib::ustring & getResponseStyle() const;
private:
static const Glib::ustring resp;
+ const CgiEnvironment * e;
+ char * buf;
+ std::string what;
};
- class ErrorStage : public FailStage {
+ /// Custom unhandled error handling stage
+ class CustomErrorStage : public DefaultErrorStage, public PresentStage {
public:
- ErrorStage(const CgiEnvironment *, const std::exception &);
- virtual ~ErrorStage();
-
+ CustomErrorStage(const CgiEnvironment *, const std::exception &);
+ virtual StagePtr run();
virtual XmlDocPtr getDataDocument() const;
virtual HttpHeaderPtr getHeader() const;
virtual const Glib::ustring & getResponseRootNodeName() const;
- private:
- static const Glib::ustring resp;
+ virtual const Glib::ustring & getResponseStyle() const;
};
+
mutable StagePtr currentStage;
mutable UUID sessionID;
};