ecc4cf57e8b61a9322da038a4778e85234701435
[fms.git] / src / http / httpthread.cpp
1 #include "../../include/http/httpthread.h"\r
2 #include "../../include/http/fmshttprequesthandlerfactory.h"\r
3 #include "../../include/option.h"\r
4 #include "../../include/stringfunctions.h"\r
5 \r
6 #include <Poco/Net/ServerSocket.h>\r
7 #include <Poco/Net/HTTPServer.h>\r
8 #include <Poco/Net/HTTPServerParams.h>\r
9 \r
10 #include <iostream>\r
11 \r
12 #ifdef XMEM\r
13         #include <xmem.h>\r
14 #endif\r
15 \r
16 HTTPThread::HTTPThread()\r
17 {\r
18         m_listenport=8080;\r
19         std::string portstr;\r
20         Option::Instance()->Get("HTTPListenPort",portstr);\r
21         StringFunctions::Convert(portstr,m_listenport);\r
22 \r
23         // push back page handlers\r
24         /*\r
25         m_pagehandlers.push_back(new ShowCaptchaPage());\r
26         m_pagehandlers.push_back(new OptionsPage(templatestr));\r
27         m_pagehandlers.push_back(new LocalIdentitiesPage(templatestr));\r
28         m_pagehandlers.push_back(new CreateIdentityPage(templatestr));\r
29         m_pagehandlers.push_back(new AnnounceIdentityPage(templatestr));\r
30         m_pagehandlers.push_back(new AddPeerPage(templatestr));\r
31         m_pagehandlers.push_back(new PeerTrustPage(templatestr));\r
32         m_pagehandlers.push_back(new ControlBoardPage(templatestr));\r
33         m_pagehandlers.push_back(new PeerDetailsPage(templatestr));\r
34         m_pagehandlers.push_back(new PeerMaintenancePage(templatestr));\r
35         m_pagehandlers.push_back(new ExecQueryPage(templatestr));\r
36         m_pagehandlers.push_back(new BoardsPage(templatestr));\r
37         m_pagehandlers.push_back(new InsertedFilesPage(templatestr));\r
38         m_pagehandlers.push_back(new ConfirmPage(templatestr));\r
39         // homepage must be last - catch all page handler\r
40         m_pagehandlers.push_back(new HomePage(templatestr));\r
41         */\r
42         \r
43 }\r
44 \r
45 /*\r
46 void HTTPThread::PageCallback(shttpd_arg *arg)\r
47 {\r
48 \r
49         HTTPThread *thread=(HTTPThread *)arg->user_data;\r
50 \r
51         for(std::vector<IPageHandler *>::iterator i=thread->m_pagehandlers.begin(); i!=thread->m_pagehandlers.end(); )\r
52         {\r
53                 if((*i)->Handle(arg)==true)\r
54                 {\r
55                         i=thread->m_pagehandlers.end();\r
56                 }\r
57                 else\r
58                 {\r
59                         i++;\r
60                 }\r
61         }\r
62 \r
63 }\r
64 */\r
65 void HTTPThread::run()\r
66 {\r
67         m_log->debug("HTTPThread::run thread started.");\r
68 \r
69         Poco::Net::ServerSocket sock(m_listenport);\r
70         Poco::Net::HTTPServerParams* pParams = new Poco::Net::HTTPServerParams;\r
71         pParams->setMaxQueued(30);\r
72         pParams->setMaxThreads(5);\r
73         Poco::Net::HTTPServer srv(new FMSHTTPRequestHandlerFactory,sock,pParams);\r
74 \r
75         srv.start();\r
76         m_log->trace("Started HTTPServer");\r
77 \r
78         do\r
79         {\r
80                 Poco::Thread::sleep(1000);\r
81         }while(!IsCancelled());\r
82 \r
83         m_log->trace("Trying to stop HTTPServer");\r
84         srv.stop();\r
85         m_log->trace("Stopped HTTPServer");\r
86 \r
87         m_log->debug("HTTPThread::run thread exiting.");\r
88 \r
89 }\r