#include #include #include "cgiAppEngine.h" #include "cgiRequestContext.h" #include "cgiHttpHeader.h" #include "logger.h" namespace CgiApplicationExtras { class FailStage : public CgiApplicationEngine::ResponseStage { public: FailStage(int c, const std::string & m) : ResponseStage(NULL), code(c), message(m) { } CgiApplicationEngine::HttpHeaderPtr getHeader(CgiRequestContext *) const { Project2HttpHeader * header = new Project2HttpHeader(boost::lexical_cast(code) + " " + message); return CgiApplicationEngine::HttpHeaderPtr(header); } CgiApplicationEngine::NextStage run(CgiRequestContext *) { return CgiApplicationEngine::NextStage(NULL, this, NULL, NULL); } private: const int code; const std::string message; }; class CgiFail : public View { public: CgiFail(ScriptNodePtr e) : SourceObject(e), View(e), code(e, "code", 500), message(e, "message", "Application error") { } void execute(const MultiRowSetPresenter *, ExecContext * ec) const { throw CgiApplicationEngine::ResponseStagePtr( new FailStage(code(ec), message(ec))); } private: Variable code, message; }; } NAMEDFACTORY("cgifail", CgiApplicationExtras::CgiFail, ViewFactory);