#include "HTTPSessions.h" #include "HTTPSession.h" #include "Log.h" namespace http { HTTPSession * HTTPSessions::findSessionByHeader(HTTPRequest &httpRequest) { coreutils::ZString sessionId(httpRequest.message.getHeaderKeyPairValue("Cookie", "SessionId")); if(sessionId.str() == "") return createHTTPSession(httpRequest); else return findSessionById(sessionId, httpRequest); } HTTPSession * HTTPSessions::findSessionById(coreutils::ZString &sessionId, HTTPRequest &httpRequest) { try { HTTPSession *httpSession = sessions.at(sessionId); return httpSession; } catch (...) { return createHTTPSession(httpRequest); } } HTTPSession * HTTPSessions::createHTTPSession(HTTPRequest &httpRequest) { HTTPSession *httpSession = new HTTPSession(); coreutils::ZString sessionId(httpSession->getSessionId()); sessions.insert(std::make_pair(sessionId, httpSession)); std::stringstream temp; temp << "SessionId=" << httpSession->getSessionId(); httpRequest.response.addHeader(coreutils::IMFHeader("Set-Cookie", temp.str().c_str())); return httpSession; } int HTTPSessions::processCommand(std::string command, core::TCPSession *session, std::stringstream &data) { if(sessions.size() > 0) { int seq = 0; for(auto httpSession: sessions) data << "|" << ++seq << "|" << httpSession.second->getSessionId() << "|" << std::endl; } else data << "There are no sessions active." << std::endl; return 1; } }