HTTPServer/HTTPHandler.cpp
2020-11-07 17:31:08 -08:00

56 lines
1.7 KiB
C++

#include "HTTPHandler.h"
#include "HTTPSession.h"
#include "HTTPServer.h"
#include "HTTPRequest.h"
#include "PString.h"
#include "IMFFormData.h"
#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);
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<HTTPServer&>(session->server).httpSessions.findSessionByHeader(httpRequest);
std::stringstream content;
if(static_cast<HTTPServer &>(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());
}
else {
httpRequest->response.setCode("404");
httpRequest->response.setText("Not Found");
data << httpRequest->response.getResponse(content.str());
}
return true;
}
}