version 0.3.23
[fms.git] / src / http / pages / showimagepage.cpp
diff --git a/src/http/pages/showimagepage.cpp b/src/http/pages/showimagepage.cpp
new file mode 100644 (file)
index 0000000..8b653ee
--- /dev/null
@@ -0,0 +1,64 @@
+#include "../../../include/http/pages/showimagepage.h"\r
+\r
+#ifdef XMEM\r
+       #include <xmem.h>\r
+#endif\r
+\r
+std::map<std::string,std::vector<char> > ShowImagePage::m_imagecache;\r
+\r
+void ShowImagePage::handleRequest(Poco::Net::HTTPServerRequest &request, Poco::Net::HTTPServerResponse &response)\r
+{\r
+       m_log->trace("ShowImagePage::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("image")!=queryvars.end())\r
+       {\r
+               if(m_imagecache.find((*queryvars.find("image")).second)!=m_imagecache.end())\r
+               {\r
+                       content+=std::string(m_imagecache[(*queryvars.find("image")).second].begin(),m_imagecache[(*queryvars.find("image")).second].end());\r
+               }\r
+               else\r
+               {\r
+                       FILE *infile=fopen((*queryvars.find("image")).second.c_str(),"rb");\r
+                       if(infile)\r
+                       {\r
+                               fseek(infile,0,SEEK_END);\r
+                               long filelen=ftell(infile);\r
+                               fseek(infile,0,SEEK_SET);\r
+\r
+                               if(filelen>0)\r
+                               {\r
+                                       std::vector<char> data(filelen,0);\r
+                                       fread(&data[0],1,data.size(),infile);\r
+                                       content+=std::string(data.begin(),data.end());\r
+                                       m_imagecache[(*queryvars.find("image")).second]=data;\r
+                               }\r
+\r
+                               fclose(infile);\r
+                       }\r
+               }\r
+       }\r
+\r
+       std::ostream &ostr = response.send();\r
+       ostr << content;\r
+}\r
+\r
+const bool ShowImagePage::WillHandleURI(const std::string &uri)\r
+{\r
+       if(uri.find("showimage.htm")!=std::string::npos)\r
+       {\r
+               return true;\r
+       }\r
+       else\r
+       {\r
+               return false;\r
+       }\r
+}\r