diff --git a/HTTPHandler.cpp b/HTTPHandler.cpp index 457a692..ccaa4b1 100644 --- a/HTTPHandler.cpp +++ b/HTTPHandler.cpp @@ -12,31 +12,42 @@ namespace http { coreutils::Log(coreutils::LOG_DEBUG_4) << "DATA[" << request << "]"; - coreutils::PString request1(request); - HTTPRequest httpRequest(request1); + if(mode == REQUEST) { + + coreutils::PString request1(request); + HTTPRequest httpRequest(request1); - HTTPSession *httpSession = static_cast(session->server).httpSessions.findSessionByHeader(httpRequest); + HTTPSession *httpSession = static_cast(session->server).httpSessions.findSessionByHeader(httpRequest); - std::stringstream content; + 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") << "'"; - } + 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") << "'"; + } - httpRequest.response.setCode("200"); - httpRequest.response.setText("OK"); - data << httpRequest.response.getResponse(content.str()); - } + httpRequest.response.setCode("200"); + httpRequest.response.setText("OK"); + data << httpRequest.response.getResponse(content.str()); + } - else { - httpRequest.response.setCode("404"); - httpRequest.response.setText("Not Found"); - data << httpRequest.response.getResponse(content.str()); + else { + httpRequest.response.setCode("404"); + httpRequest.response.setText("Not Found"); + data << httpRequest.response.getResponse(content.str()); + } + + grabInput(); + mode = IMFHEADER; } - + else if(mode == IMFHEADER) { + HTTPHeader header(content); + releaseGrab(); + mode = REQUEST; + } + return true; } diff --git a/HTTPHandler.h b/HTTPHandler.h index e521ae8..f92552a 100644 --- a/HTTPHandler.h +++ b/HTTPHandler.h @@ -11,7 +11,11 @@ namespace http { public: int processCommand(std::string request, core::TCPSession *session, std::stringstream &data) override; - + + private: + enum Mode { REQUEST, IMFHEADER }; + Mode mode = REQUEST; + }; } diff --git a/HTTPServer b/HTTPServer index 484adfa..8765efd 100755 Binary files a/HTTPServer and b/HTTPServer differ