version 0.3.29
[fms.git] / src / http / httpthread.cpp
index ceaad4f..2315439 100644 (file)
 HTTPThread::HTTPThread()\r
 {\r
        m_listenport=8080;\r
-       std::string portstr;\r
-       Option::Instance()->Get("HTTPListenPort",portstr);\r
-       StringFunctions::Convert(portstr,m_listenport);\r
-\r
-       // push back page handlers\r
-       /*\r
-       m_pagehandlers.push_back(new ShowCaptchaPage());\r
-       m_pagehandlers.push_back(new OptionsPage(templatestr));\r
-       m_pagehandlers.push_back(new LocalIdentitiesPage(templatestr));\r
-       m_pagehandlers.push_back(new CreateIdentityPage(templatestr));\r
-       m_pagehandlers.push_back(new AnnounceIdentityPage(templatestr));\r
-       m_pagehandlers.push_back(new AddPeerPage(templatestr));\r
-       m_pagehandlers.push_back(new PeerTrustPage(templatestr));\r
-       m_pagehandlers.push_back(new ControlBoardPage(templatestr));\r
-       m_pagehandlers.push_back(new PeerDetailsPage(templatestr));\r
-       m_pagehandlers.push_back(new PeerMaintenancePage(templatestr));\r
-       m_pagehandlers.push_back(new ExecQueryPage(templatestr));\r
-       m_pagehandlers.push_back(new BoardsPage(templatestr));\r
-       m_pagehandlers.push_back(new InsertedFilesPage(templatestr));\r
-       m_pagehandlers.push_back(new ConfirmPage(templatestr));\r
-       // homepage must be last - catch all page handler\r
-       m_pagehandlers.push_back(new HomePage(templatestr));\r
-       */\r
-       \r
 }\r
 \r
-/*\r
-void HTTPThread::PageCallback(shttpd_arg *arg)\r
+void HTTPThread::run()\r
 {\r
+       m_log->debug("HTTPThread::run thread started.");\r
+\r
+       LoadDatabase();\r
+       Option option(m_db);\r
 \r
-       HTTPThread *thread=(HTTPThread *)arg->user_data;\r
+       std::string portstr("8080");\r
+       option.Get("HTTPListenPort",portstr);\r
+       StringFunctions::Convert(portstr,m_listenport);\r
 \r
-       for(std::vector<IPageHandler *>::iterator i=thread->m_pagehandlers.begin(); i!=thread->m_pagehandlers.end(); )\r
+       try\r
        {\r
-               if((*i)->Handle(arg)==true)\r
+               Poco::Net::ServerSocket sock(m_listenport);\r
+               Poco::Net::HTTPServerParams* pParams = new Poco::Net::HTTPServerParams;\r
+               pParams->setMaxQueued(30);\r
+               pParams->setMaxThreads(5);\r
+               Poco::Net::HTTPServer srv(new FMSHTTPRequestHandlerFactory(m_db),sock,pParams);\r
+\r
+               srv.start();\r
+               m_log->trace("Started HTTPServer");\r
+\r
+               do\r
                {\r
-                       i=thread->m_pagehandlers.end();\r
-               }\r
-               else\r
+                       Poco::Thread::sleep(1000);\r
+               }while(!IsCancelled());\r
+\r
+               m_log->trace("Trying to stop HTTPServer");\r
+               srv.stop();\r
+               m_log->trace("Stopped HTTPServer");\r
+               \r
+               m_log->trace("Waiting for current HTTP requests to finish");\r
+               while(srv.currentConnections()>0)\r
                {\r
-                       i++;\r
+                       Poco::Thread::sleep(500);\r
                }\r
        }\r
-\r
-}\r
-*/\r
-void HTTPThread::run()\r
-{\r
-       m_log->debug("HTTPThread::run thread started.");\r
-\r
-       Poco::Net::ServerSocket sock(m_listenport);\r
-       Poco::Net::HTTPServerParams* pParams = new Poco::Net::HTTPServerParams;\r
-       pParams->setMaxQueued(10);\r
-       pParams->setMaxThreads(5);\r
-       Poco::Net::HTTPServer srv(new FMSHTTPRequestHandlerFactory,sock,pParams);\r
-\r
-       srv.start();\r
-\r
-       do\r
+       catch(Poco::Exception &e)\r
        {\r
-               Poco::Thread::sleep(1000);\r
-       }while(!IsCancelled());\r
-\r
-       srv.stop();\r
+               m_log->fatal("HTTPThread::run caught "+e.displayText());\r
+       }\r
+       catch(...)\r
+       {\r
+               m_log->fatal("HTTPThread::run caught unknown exception");\r
+       }\r
 \r
        m_log->debug("HTTPThread::run thread exiting.");\r
 \r