X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fhttp%2Fhttpthread.cpp;h=23154392a47108c244e2a5ff4259c8317a628822;hb=59a5414ec47a2932a7802fcd1d98c4d80166564f;hp=ceaad4ff136fe078ec9e0e1a723499d2309626e3;hpb=dec33c63afafabf83c3039e916725cac6faef9b3;p=fms.git diff --git a/src/http/httpthread.cpp b/src/http/httpthread.cpp index ceaad4f..2315439 100644 --- a/src/http/httpthread.cpp +++ b/src/http/httpthread.cpp @@ -16,70 +16,53 @@ HTTPThread::HTTPThread() { m_listenport=8080; - std::string portstr; - Option::Instance()->Get("HTTPListenPort",portstr); - StringFunctions::Convert(portstr,m_listenport); - - // push back page handlers - /* - m_pagehandlers.push_back(new ShowCaptchaPage()); - m_pagehandlers.push_back(new OptionsPage(templatestr)); - m_pagehandlers.push_back(new LocalIdentitiesPage(templatestr)); - m_pagehandlers.push_back(new CreateIdentityPage(templatestr)); - m_pagehandlers.push_back(new AnnounceIdentityPage(templatestr)); - m_pagehandlers.push_back(new AddPeerPage(templatestr)); - m_pagehandlers.push_back(new PeerTrustPage(templatestr)); - m_pagehandlers.push_back(new ControlBoardPage(templatestr)); - m_pagehandlers.push_back(new PeerDetailsPage(templatestr)); - m_pagehandlers.push_back(new PeerMaintenancePage(templatestr)); - m_pagehandlers.push_back(new ExecQueryPage(templatestr)); - m_pagehandlers.push_back(new BoardsPage(templatestr)); - m_pagehandlers.push_back(new InsertedFilesPage(templatestr)); - m_pagehandlers.push_back(new ConfirmPage(templatestr)); - // homepage must be last - catch all page handler - m_pagehandlers.push_back(new HomePage(templatestr)); - */ - } -/* -void HTTPThread::PageCallback(shttpd_arg *arg) +void HTTPThread::run() { + m_log->debug("HTTPThread::run thread started."); + + LoadDatabase(); + Option option(m_db); - HTTPThread *thread=(HTTPThread *)arg->user_data; + std::string portstr("8080"); + option.Get("HTTPListenPort",portstr); + StringFunctions::Convert(portstr,m_listenport); - for(std::vector::iterator i=thread->m_pagehandlers.begin(); i!=thread->m_pagehandlers.end(); ) + try { - if((*i)->Handle(arg)==true) + Poco::Net::ServerSocket sock(m_listenport); + Poco::Net::HTTPServerParams* pParams = new Poco::Net::HTTPServerParams; + pParams->setMaxQueued(30); + pParams->setMaxThreads(5); + Poco::Net::HTTPServer srv(new FMSHTTPRequestHandlerFactory(m_db),sock,pParams); + + srv.start(); + m_log->trace("Started HTTPServer"); + + do { - i=thread->m_pagehandlers.end(); - } - else + Poco::Thread::sleep(1000); + }while(!IsCancelled()); + + m_log->trace("Trying to stop HTTPServer"); + srv.stop(); + m_log->trace("Stopped HTTPServer"); + + m_log->trace("Waiting for current HTTP requests to finish"); + while(srv.currentConnections()>0) { - i++; + Poco::Thread::sleep(500); } } - -} -*/ -void HTTPThread::run() -{ - m_log->debug("HTTPThread::run thread started."); - - Poco::Net::ServerSocket sock(m_listenport); - Poco::Net::HTTPServerParams* pParams = new Poco::Net::HTTPServerParams; - pParams->setMaxQueued(10); - pParams->setMaxThreads(5); - Poco::Net::HTTPServer srv(new FMSHTTPRequestHandlerFactory,sock,pParams); - - srv.start(); - - do + catch(Poco::Exception &e) { - Poco::Thread::sleep(1000); - }while(!IsCancelled()); - - srv.stop(); + m_log->fatal("HTTPThread::run caught "+e.displayText()); + } + catch(...) + { + m_log->fatal("HTTPThread::run caught unknown exception"); + } m_log->debug("HTTPThread::run thread exiting.");