/* HTTPRequestHandler.cpp */ #include "mbed.h" #include "HTTPRequestHandler.h" #define _DEBUG 0 #if (_DEBUG && !defined(TARGET_LPC11U24)) #define INFO(x, ...) std::printf("[HTTPRequestHandler : DBG]"x"\r\n", ##__VA_ARGS__); #define WARN(x, ...) std::printf("[HTTPRequestHandler : DBG]"x"\r\n", ##__VA_ARGS__); #define ERR(x, ...) std::printf("[HTTPRequestHandler : DBG]"x"\r\n", ##__VA_ARGS__); #else #define INFO(x, ...) #define WARN(x, ...) #define ERR(x, ...) #endif static char buffer[128]; const char hdrDNT[] = "DNT: 1\r\n"; const char hdrMaxAge[] = "MaxAge: 0\r\n"; const char hdrConClose[] = "Connection: Keep-Alive\r\n"; const char hdrContent[] = "Content-Type: text/html\r\n"; const char hdrServer[] = "Server: mbed embedded\r\n"; const char hdrEndl[] = "\r\n"; HTTPRequestHandler::HTTPRequestHandler(HTTPConnection::HTTPMessage& Msg, TCPSocketConnection& Tcp) : msg(Msg), tcp(Tcp) { msg = Msg; tcp = Tcp; } HTTPRequestHandler::~HTTPRequestHandler() { } void HTTPRequestHandler::handleRequest() { int err = 0; switch (msg.request) { case HTTP_RT_GET: INFO("Dispatching GET Request."); err = handleGetRequest(); break; case HTTP_RT_POST: INFO("Dispatching POST request."); err = handlePostRequest(); break; case HTTP_RT_PUT: INFO("Dispatching PUT request."); err = handlePutRequest(); break; default: INFO("Error in handleRequest, unhandled request type."); err = HTTP_NotImplemented; break; } // if any of these functions returns a negative number, call the error handler if (err > 0) { handleError(err); } } static const char* szErrorPage = "
HTTPServer Error
\r\n\r\n";
void HTTPRequestHandler::handleError(int errorCode, HTTPHeaders* header)
{
INFO("Handling error !");
tcp.set_blocking(true, 1500);
sprintf(buffer,"HTTP/1.1 %d Error\r\n", errorCode);
tcp.send(buffer, strlen(buffer));
sprintf(buffer, "Content-Length: %d\r\n", strlen(szErrorPage));
tcp.send(buffer, strlen(buffer));
if (header == NULL) {
sprintf(buffer, "Content-Type: text/html\r\nServer: mbed embedded\r\n\n\r");
tcp.send(buffer, strlen(buffer));
}
else {
for ( map