1 #include "../../include/http/httpthread.h"
\r
2 #include "../../include/option.h"
\r
3 #include "../../include/stringfunctions.h"
\r
4 #include "../../include/http/pages/homepage.h"
\r
5 #include "../../include/http/pages/optionspage.h"
\r
6 #include "../../include/http/pages/showcaptchapage.h"
\r
7 #include "../../include/http/pages/createidentitypage.h"
\r
8 #include "../../include/http/pages/localidentitiespage.h"
\r
9 #include "../../include/http/pages/announceidentitypage.h"
\r
10 #include "../../include/http/pages/addpeerpage.h"
\r
11 #include "../../include/http/pages/peertrustpage.h"
\r
12 #include "../../include/http/pages/controlboardpage.h"
\r
13 #include "../../include/http/pages/peerdetailspage.h"
\r
14 #include "../../include/http/pages/peermaintenancepage.h"
\r
15 #include "../../include/http/pages/execquerypage.h"
\r
16 #include "../../include/http/pages/boardspage.h"
\r
17 #include "../../include/http/pages/insertedfilespage.h"
\r
18 #include "../../include/http/pages/confirmpage.h"
\r
26 HTTPThread::HTTPThread()
\r
28 std::string templatestr;
\r
30 std::string portstr;
\r
31 Option::Instance()->Get("HTTPListenPort",portstr);
\r
32 StringFunctions::Convert(portstr,port);
\r
35 Option::Instance()->Get("HTTPAccessControl",aclstr);
\r
38 templatestr="<html><head></head><body><a href=\"home.htm\">Home</a><br><h1>Could not find template.htm! Place in program directory and restart!</h1><br>[CONTENT]</body></html>";
\r
39 FILE *infile=fopen("template.htm","r+b");
\r
42 fseek(infile,0,SEEK_END);
\r
43 long len=ftell(infile);
\r
44 std::vector<char> data(len,0);
\r
45 fseek(infile,0,SEEK_SET);
\r
46 fread(&data[0],1,len,infile);
\r
48 templatestr.assign(data.begin(),data.end());
\r
52 m_log->WriteLog(LogFile::LOGLEVEL_ERROR,"HTTPThread::HTTPThread could not open template.htm");
\r
55 // push back page handlers
\r
56 m_pagehandlers.push_back(new ShowCaptchaPage());
\r
57 m_pagehandlers.push_back(new OptionsPage(templatestr));
\r
58 m_pagehandlers.push_back(new LocalIdentitiesPage(templatestr));
\r
59 m_pagehandlers.push_back(new CreateIdentityPage(templatestr));
\r
60 m_pagehandlers.push_back(new AnnounceIdentityPage(templatestr));
\r
61 m_pagehandlers.push_back(new AddPeerPage(templatestr));
\r
62 m_pagehandlers.push_back(new PeerTrustPage(templatestr));
\r
63 m_pagehandlers.push_back(new ControlBoardPage(templatestr));
\r
64 m_pagehandlers.push_back(new PeerDetailsPage(templatestr));
\r
65 m_pagehandlers.push_back(new PeerMaintenancePage(templatestr));
\r
66 m_pagehandlers.push_back(new ExecQueryPage(templatestr));
\r
67 m_pagehandlers.push_back(new BoardsPage(templatestr));
\r
68 m_pagehandlers.push_back(new InsertedFilesPage(templatestr));
\r
69 m_pagehandlers.push_back(new ConfirmPage(templatestr));
\r
70 // homepage must be last - catch all page handler
\r
71 m_pagehandlers.push_back(new HomePage(templatestr));
\r
74 m_ctx=shttpd_init();
\r
75 shttpd_set_option(m_ctx,"ports",portstr.c_str());
\r
76 shttpd_set_option(m_ctx,"acl",aclstr.c_str());
\r
78 shttpd_register_uri(m_ctx,"*",HTTPThread::PageCallback,this);
\r
82 HTTPThread::~HTTPThread()
\r
86 for(std::vector<IPageHandler *>::iterator i=m_pagehandlers.begin(); i!=m_pagehandlers.end(); i++)
\r
93 void HTTPThread::PageCallback(shttpd_arg *arg)
\r
96 HTTPThread *thread=(HTTPThread *)arg->user_data;
\r
98 for(std::vector<IPageHandler *>::iterator i=thread->m_pagehandlers.begin(); i!=thread->m_pagehandlers.end(); )
\r
100 if((*i)->Handle(arg)==true)
\r
102 i=thread->m_pagehandlers.end();
\r
112 void HTTPThread::Run()
\r
114 m_log->WriteLog(LogFile::LOGLEVEL_DEBUG,"HTTPThread::run thread started.");
\r
118 shttpd_poll(m_ctx,1000);
\r
119 }while(!IsCancelled());
\r
121 m_log->WriteLog(LogFile::LOGLEVEL_DEBUG,"HTTPThread::run thread exiting.");
\r