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.h83
1 files changed, 62 insertions, 21 deletions
diff --git a/project2/cgi/cgiAppEngine.h b/project2/cgi/cgiAppEngine.h
index 1425207..79638f4 100644
--- a/project2/cgi/cgiAppEngine.h
+++ b/project2/cgi/cgiAppEngine.h
@@ -8,36 +8,32 @@
#include "../commonObjects.h"
#include "../uuid.h"
#include <boost/intrusive_ptr.hpp>
-#include <boost/function.hpp>
-#include <libxml++/document.h>
-#include <libxml++/parsers/domparser.h>
class CgiEnvironment;
class Session;
namespace cgicc {
- class HTTPContentHeader;
+ class HTTPHeader;
+}
+namespace xmlpp {
+ class Document;
}
class CgiApplicationEngine : public ApplicationEngine {
public:
typedef boost::shared_ptr<xmlpp::Document> XmlDocPtr;
- typedef boost::function1<void, xmlDocPtr> XmlWriter;
+ typedef boost::shared_ptr<cgicc::HTTPHeader> HttpHeaderPtr;
CgiApplicationEngine(const CgiEnvironment *);
virtual ~CgiApplicationEngine();
void process() const;
- const cgicc::HTTPContentHeader * getHeader() const { return header; }
- void write(const XmlWriter & w) const;
+ void write(std::ostream &) const;
const Environment * env() const;
SessionPtr session() const;
virtual Glib::ustring resolveCurrentConfig() const;
void addAppData(const Presenter * p) const;
const CgiEnvironment * _env;
- protected:
- mutable cgicc::HTTPContentHeader * header;
-
private:
typedef std::pair<Glib::ustring, Glib::ustring> DomainPlatform;
typedef std::list<DomainPlatform> DomainPlatforms;
@@ -45,39 +41,84 @@ class CgiApplicationEngine : public ApplicationEngine {
bool checkDomain(const DomainPlatforms::value_type & i) const;
void loadEngineSection(const xmlpp::Element *) const;
- mutable XmlDocPtr doc;
-
class Stage;
typedef boost::intrusive_ptr<Stage> StagePtr;
class Stage : public virtual CommonObjects {
public:
- Stage(const CgiApplicationEngine *);
+ Stage();
virtual ~Stage() = 0;
virtual StagePtr run() = 0;
- protected:
- const CgiApplicationEngine * appEngine;
+ virtual XmlDocPtr getDataDocument() const = 0;
+ virtual HttpHeaderPtr getHeader() const = 0;
};
- class RequestStage : public Stage {
+ class RequestStage : public Stage, public XmlPresenter {
public:
- RequestStage(const CgiApplicationEngine *, const std::string & id);
+ RequestStage(const std::string & id);
virtual ~RequestStage();
+
virtual StagePtr run();
- std::string present;
+ virtual XmlDocPtr getDataDocument() const;
+ virtual HttpHeaderPtr getHeader() const;
+ virtual const Glib::ustring & getResponseRootNodeName() const;
+ virtual const Glib::ustring & getResponseStyle() const;
+
protected:
+ std::string present;
typedef Storage<ParamChecker>::Objects ParamCheckers;
ParamCheckers parameterChecks;
typedef Storage<NoOutputExecute>::Objects Tasks;
Tasks tasks;
+
+ private:
+ static const Glib::ustring resp;
+ static const Glib::ustring style;
};
- class PresentStage : public Stage, public XmlPresenter {
+ class PresentStage : public Stage, public XmlProcessPresenter {
public:
- PresentStage(const CgiApplicationEngine *, const std::string & id);
- PresentStage(const CgiApplicationEngine *, const std::string & group, const std::string & id);
+ PresentStage(const std::string & id);
virtual ~PresentStage();
+
+ virtual StagePtr run();
+ virtual XmlDocPtr getDataDocument() const;
+ virtual HttpHeaderPtr getHeader() const;
+ };
+
+ class FailStage : public Stage, public XmlPresenter {
+ public:
+ FailStage(const CgiEnvironment *);
+ virtual ~FailStage();
+
+ virtual const Glib::ustring & getResponseStyle() const;
virtual StagePtr run();
+
+ protected:
+ const CgiEnvironment * env;
+ };
+
+ class NotFoundStage : public FailStage {
+ public:
+ NotFoundStage(const CgiEnvironment *, const XmlScriptParser::NotFound &);
+ virtual ~NotFoundStage();
+
+ virtual XmlDocPtr getDataDocument() const;
+ virtual HttpHeaderPtr getHeader() const;
+ virtual const Glib::ustring & getResponseRootNodeName() const;
+ private:
+ static const Glib::ustring resp;
+ };
+
+ class ErrorStage : public FailStage {
+ public:
+ ErrorStage(const CgiEnvironment *, const std::exception &);
+ virtual ~ErrorStage();
+ virtual XmlDocPtr getDataDocument() const;
+ virtual HttpHeaderPtr getHeader() const;
+ virtual const Glib::ustring & getResponseRootNodeName() const;
+ private:
+ static const Glib::ustring resp;
};
mutable StagePtr currentStage;
mutable UUID sessionID;