diff options
Diffstat (limited to 'project2/cgi/cgiAppEngine.h')
-rw-r--r-- | project2/cgi/cgiAppEngine.h | 83 |
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; |