diff options
-rw-r--r-- | project2/cgiAppEngine.cpp | 13 | ||||
-rw-r--r-- | project2/cgiAppEngine.h | 5 | ||||
-rw-r--r-- | project2/p2webMain.cpp | 8 |
3 files changed, 15 insertions, 11 deletions
diff --git a/project2/cgiAppEngine.cpp b/project2/cgiAppEngine.cpp index e041d20..4f04b7e 100644 --- a/project2/cgiAppEngine.cpp +++ b/project2/cgiAppEngine.cpp @@ -19,10 +19,10 @@ typedef std::string SValue; SessionContainer * sessionsContainer = new SessionContainerShm(); -CgiApplicationEngine::CgiApplicationEngine(const CgiEnvironment * e, cgicc::HTTPContentHeader * h) : +CgiApplicationEngine::CgiApplicationEngine(const CgiEnvironment * e) : ApplicationEngine(e), _env(e), - header(h), + header(NULL), sessionID(boost::uuids::nil_generator()()) { BOOST_FOREACH(const cgicc::HTTPCookie c, e->getCookieList()) { @@ -40,6 +40,7 @@ CgiApplicationEngine::CgiApplicationEngine(const CgiEnvironment * e, cgicc::HTTP CgiApplicationEngine::~CgiApplicationEngine() { + delete header; } const Environment * @@ -121,12 +122,16 @@ CgiApplicationEngine::PresentStage::getDataDocument() const } // XSLT Style char * buf; - if (asprintf(&buf, "type=\"text/xsl\" href=\"%s\"", + if (responseStyle.length() && asprintf(&buf, "type=\"text/xsl\" href=\"%s\"", responseStyle.c_str()) > 0) { xmlAddPrevSibling(responseRoot->cobj(), xmlNewDocPI(responseDoc->cobj(), BAD_CAST "xml-stylesheet", BAD_CAST buf)); + free(buf); + appEngine->header = new cgicc::HTTPContentHeader("text/xml-xslt"); + } + else { + appEngine->header = new cgicc::HTTPContentHeader("text/xml"); } - free(buf); return responseDoc; } diff --git a/project2/cgiAppEngine.h b/project2/cgiAppEngine.h index d2a1f44..a42cedd 100644 --- a/project2/cgiAppEngine.h +++ b/project2/cgiAppEngine.h @@ -18,10 +18,11 @@ namespace cgicc { class CgiApplicationEngine : public ApplicationEngine { public: - CgiApplicationEngine(const CgiEnvironment *, cgicc::HTTPContentHeader *); + CgiApplicationEngine(const CgiEnvironment *); virtual ~CgiApplicationEngine(); void process() const; + const cgicc::HTTPContentHeader * getHeader() const { return header; } template <class Writer> void write(const Writer & w) const { @@ -32,7 +33,7 @@ class CgiApplicationEngine : public ApplicationEngine { PresenterPtr getPresenter(const std::string & group, const std::string & id) const; const CgiEnvironment * _env; protected: - cgicc::HTTPContentHeader * header; + mutable cgicc::HTTPContentHeader * header; private: mutable boost::shared_ptr<xmlpp::Document> doc; class Stage { diff --git a/project2/p2webMain.cpp b/project2/p2webMain.cpp index a526f8d..ef070f0 100644 --- a/project2/p2webMain.cpp +++ b/project2/p2webMain.cpp @@ -30,11 +30,10 @@ int main(void) try { cgicc::Cgicc cgi(&IO); CgiEnvironment env(&cgi); - cgicc::HTTPContentHeader header("text/xml-xslt"); - CgiApplicationEngine app(&env, &header); + CgiApplicationEngine app(&env); app.process(); IO << "Cache-control: no-cache" << std::endl; - header.render(IO); + app.getHeader()->render(IO); xmlOutputBufferPtr out = xmlOutputBufferCreateIO( xmlWrite, NULL, &IO, xmlGetCharEncodingHandler(XML_CHAR_ENCODING_UTF8)); app.write(boost::bind(xmlSaveFileTo, out, _1, "utf-8")); @@ -54,8 +53,7 @@ int main(void) else { cgicc::Cgicc cgi(NULL); CgiEnvironment env(&cgi); - cgicc::HTTPContentHeader header("text/xml-xslt"); - CgiApplicationEngine app(&env, &header); + CgiApplicationEngine app(&env); app.process(); app.write(boost::bind(xmlDocDump, realstdout, _1)); } |