#include <xmem.h>\r
#endif\r
\r
-const std::string ShowCaptchaPage::GeneratePage(const std::string &method, const std::map<std::string,std::string> &queryvars)\r
+void ShowCaptchaPage::handleRequest(Poco::Net::HTTPServerRequest &request, Poco::Net::HTTPServerResponse &response)\r
{\r
- std::string content="HTTP/1.1 200 OK\r\n";\r
+ m_log->trace("ShowCaptchaPage::handleRequest from "+request.clientAddress().toString());\r
+\r
+ std::map<std::string,std::string> queryvars;\r
+ CreateQueryVarMap(request,queryvars);\r
+\r
+ if(request.getVersion()==Poco::Net::HTTPRequest::HTTP_1_1)\r
+ {\r
+ response.setChunkedTransferEncoding(true);\r
+ }\r
+\r
+ std::string content="";\r
if(queryvars.find("UUID")!=queryvars.end())\r
{\r
- SQLite3DB::Statement st=m_db->Prepare("SELECT MimeType,PuzzleData FROM tblIntroductionPuzzleRequests WHERE UUID=?;");\r
+ SQLite3DB::Statement st=m_db->Prepare("SELECT MimeType,PuzzleData FROM tblIntroductionPuzzleRequests WHERE Type='captcha' AND UUID=?;");\r
st.Bind(0,(*queryvars.find("UUID")).second);\r
st.Step();\r
\r
std::string mime;\r
std::string b64data;\r
std::vector<unsigned char> data;\r
- std::string lenstr;\r
\r
st.ResultText(0,mime);\r
st.ResultText(1,b64data);\r
Base64::Decode(b64data,data);\r
- StringFunctions::Convert(data.size(),lenstr);\r
\r
- content+="Content-Type: "+mime+"\r\n";\r
- content+="Content-Length: "+lenstr+"\r\n\r\n";\r
- content+=std::string(data.begin(),data.end());\r
+ // mime type should be short and have a / in it - otherwise skip\r
+ if(mime.size()<50 && mime.find("/")!=std::string::npos)\r
+ {\r
+ response.setContentType(mime);\r
+ response.setContentLength(data.size());\r
+ content+=std::string(data.begin(),data.end());\r
+ }\r
}\r
}\r
- return content;\r
+\r
+ std::ostream &ostr = response.send();\r
+ ostr << content;\r
}\r
\r
const bool ShowCaptchaPage::WillHandleURI(const std::string &uri)\r