diff --git a/HTTPHandler.cpp b/HTTPHandler.cpp index f669804..9397fa3 100644 --- a/HTTPHandler.cpp +++ b/HTTPHandler.cpp @@ -7,49 +7,43 @@ #include "Log.h" namespace http { - + int HTTPHandler::processCommand(std::string request, core::TCPSession *session, std::stringstream &data) { coreutils::Log(coreutils::LOG_DEBUG_1) << "DATA[" << request << "]"; coreutils::PString request1(request); - switch(mode) { - case REQUEST: - httpRequest = new HTTPRequest(request1); - session->server.commands.grabInput(session, *this); - mode = IMF; - break; - - case IMF: - httpRequest->parse(request1); - if(request == "") { - session->server.commands.clearGrab(session); - mode = REQUEST; - processHTTPRequest(session, data); - } - } - + if(!httpRequest) { + httpRequest = new HTTPRequest(request1); + session->server.commands.grabInput(session, *this); + } + else { + httpRequest->parse(request1); + if(request == "") { + session->server.commands.clearGrab(session); + } + } return true; - } + } bool HTTPHandler::processHTTPRequest(core::TCPSession *session, std::stringstream &data) { - + HTTPSession *httpSession = static_cast(session->server).httpSessions.findSessionByHeader(httpRequest); - + std::stringstream content; - + if(static_cast(session->server).pageList.processRequest(httpRequest, session, httpSession, content)) { std::string contentType = httpRequest->getHeader("Content-Type"); if(contentType == "multipart/form-data") { coreutils::IMFFormData *formdata = (coreutils::IMFFormData *)httpRequest->getBody(); - coreutils::Log(coreutils::LOG_DEBUG_2) << "username is '" << formdata->getByName("username") << "'"; + coreutils::Log(coreutils::LOG_DEBUG_2) << "username is '" << formdata->getByName("username") << "'"; } - + httpRequest->response.setCode("200"); httpRequest->response.setText("OK"); data << httpRequest->response.getResponse(content.str()); - } - + } + else { httpRequest->response.setCode("404"); httpRequest->response.setText("Not Found"); @@ -57,5 +51,5 @@ namespace http { } return true; } - + } diff --git a/HTTPHandler.h b/HTTPHandler.h index d6f6489..c4668af 100644 --- a/HTTPHandler.h +++ b/HTTPHandler.h @@ -8,20 +8,18 @@ #include "HTTPRequest.h" namespace http { - + class HTTPHandler : public core::Command { - + public: int processCommand(std::string request, core::TCPSession *session, std::stringstream &data) override; private: HTTPRequest *httpRequest; bool processHTTPRequest(core::TCPSession *session, std::stringstream &data); - enum Mode { REQUEST, IMF }; - Mode mode = REQUEST; - + }; - + } #endif diff --git a/HTTPPageList.cpp b/HTTPPageList.cpp index 79a428d..3137320 100644 --- a/HTTPPageList.cpp +++ b/HTTPPageList.cpp @@ -1,14 +1,14 @@ #include "HTTPPageList.h" namespace http { - - bool HTTPPageList::processRequest(HTTPRequest *httpRequest, core::TCPSession *session, HTTPSession *httpSession, std::stringstream &data) { - httpRequest->response.setProtocol(httpRequest->request->getProtocol()); + + bool HTTPPageList::processRequest(HTTPRequest *httpRequest, core::TCPSession *session, HTTPSession *httpSession, std::stringstream &data) { + httpRequest->response.setProtocol(httpRequest->request.getProtocol()); for(auto *page : pages) { - if(page->check(httpRequest->request->getURI())) { - return page->processCommand(httpRequest->request->getURI(), session, httpSession, httpRequest, data); + if(page->check(httpRequest->request.getURI())) { + return page->processCommand(httpRequest->request.getURI(), session, httpSession, httpRequest, data); } - } + } return false; } @@ -16,9 +16,9 @@ namespace http { page.name = name; pages.push_back(&page); } - + void HTTPPageList::remove(HTTPPage &page) {} - + } diff --git a/HTTPPageList.h b/HTTPPageList.h index 6c0e45d..6a00ddd 100644 --- a/HTTPPageList.h +++ b/HTTPPageList.h @@ -18,15 +18,15 @@ # include "__workflow_js.h" namespace http { - + class HTTPPageList { - + public: - HTTPPageList() { + HTTPPageList() { add(index, "/"); add(script, "/script"); add(editview, "/editview"); - add(editview_js, "/__editview_js"); + add(editview_js, "/__editview_js"); add(style, "/style"); add(setupadmin, "/setupadmin"); add(favicon_ico, "/favicon.ico"); @@ -36,17 +36,17 @@ namespace http { add(viewlist, "/viewlist"); add(workflow, "/workflow"); add(workflow_js, "/__workflow_js"); - } - - bool processRequest(HTTPRequest *httpRequest, core::TCPSession *session, HTTPSession *httpSession, std::stringstream &data); - + } + + bool processRequest(HTTPRequest *httpRequest, core::TCPSession *session, HTTPSession *httpSession, std::stringstream &data); + void add(HTTPPage &page, std::string name = ""); - + void remove(HTTPPage &page); - + protected: std::vector pages; - + private: __index index; __script script; @@ -61,7 +61,7 @@ namespace http { __viewlist viewlist; __workflow workflow; __workflow_js workflow_js; - + }; } diff --git a/HTTPRequest.h b/HTTPRequest.h index 13ef3b4..d4f4b1b 100644 --- a/HTTPRequest.h +++ b/HTTPRequest.h @@ -11,22 +11,14 @@ namespace http { class HTTPRequest : public coreutils::IMFMessage { - + public: - HTTPRequest(coreutils::PString &in) : IMFMessage(in) { - message = new IMFMessage(in); - } - bool parse(coreutils::PString &in) { - message->parse(in); - return true; - } - - coreutils::IMFRequest *request; - coreutils::IMFMessage *message; + HTTPRequest(coreutils::PString &in) : IMFMessage(in) {} + coreutils::IMFResponse response; - + }; - + } #endif diff --git a/HTTPServer b/HTTPServer index 0308134..76a5d3a 100755 Binary files a/HTTPServer and b/HTTPServer differ diff --git a/compile b/compile index 318b72d..213f06e 100755 --- a/compile +++ b/compile @@ -3,17 +3,17 @@ for file in *.cpp do filename="${file%.*}" - list="$list $filename.o" + list="$list $filename.o" echo -n "Compiling $filename..." - g++ -g -c -I../CoreUtils -I../ServerCore $file + g++ -g -c -I../CoreUtils -I../ServerCore $file if [ $? = '0' ] then echo "OK" else echo "ERROR" exit -1 - fi - + fi + done wait @@ -25,6 +25,6 @@ then else echo "ERROR" exit -1 -fi +fi