8b653ee04bf457801c1d1dca3e0d309930932abd
[fms.git] / src / http / pages / showimagepage.cpp
1 #include "../../../include/http/pages/showimagepage.h"\r
2 \r
3 #ifdef XMEM\r
4         #include <xmem.h>\r
5 #endif\r
6 \r
7 std::map<std::string,std::vector<char> > ShowImagePage::m_imagecache;\r
8 \r
9 void ShowImagePage::handleRequest(Poco::Net::HTTPServerRequest &request, Poco::Net::HTTPServerResponse &response)\r
10 {\r
11         m_log->trace("ShowImagePage::handleRequest from "+request.clientAddress().toString());\r
12 \r
13         std::map<std::string,std::string> queryvars;\r
14         CreateQueryVarMap(request,queryvars);\r
15 \r
16         if(request.getVersion()==Poco::Net::HTTPRequest::HTTP_1_1)\r
17         {\r
18                 response.setChunkedTransferEncoding(true);\r
19         }\r
20 \r
21         std::string content="";\r
22         if(queryvars.find("image")!=queryvars.end())\r
23         {\r
24                 if(m_imagecache.find((*queryvars.find("image")).second)!=m_imagecache.end())\r
25                 {\r
26                         content+=std::string(m_imagecache[(*queryvars.find("image")).second].begin(),m_imagecache[(*queryvars.find("image")).second].end());\r
27                 }\r
28                 else\r
29                 {\r
30                         FILE *infile=fopen((*queryvars.find("image")).second.c_str(),"rb");\r
31                         if(infile)\r
32                         {\r
33                                 fseek(infile,0,SEEK_END);\r
34                                 long filelen=ftell(infile);\r
35                                 fseek(infile,0,SEEK_SET);\r
36 \r
37                                 if(filelen>0)\r
38                                 {\r
39                                         std::vector<char> data(filelen,0);\r
40                                         fread(&data[0],1,data.size(),infile);\r
41                                         content+=std::string(data.begin(),data.end());\r
42                                         m_imagecache[(*queryvars.find("image")).second]=data;\r
43                                 }\r
44 \r
45                                 fclose(infile);\r
46                         }\r
47                 }\r
48         }\r
49 \r
50         std::ostream &ostr = response.send();\r
51         ostr << content;\r
52 }\r
53 \r
54 const bool ShowImagePage::WillHandleURI(const std::string &uri)\r
55 {\r
56         if(uri.find("showimage.htm")!=std::string::npos)\r
57         {\r
58                 return true;\r
59         }\r
60         else\r
61         {\r
62                 return false;\r
63         }\r
64 }\r