Single instance HTTP Server using new Ethernet Interface with bug fix for URL arguments
Fork of HTTPServer by
Diff: HTTPRequestHandler.cpp
- Revision:
- 11:3943841e1798
- Parent:
- 10:cbde7929db7f
- Child:
- 12:ba81cc117fb6
diff -r cbde7929db7f -r 3943841e1798 HTTPRequestHandler.cpp --- a/HTTPRequestHandler.cpp Sun Jun 02 00:37:38 2013 +0000 +++ b/HTTPRequestHandler.cpp Sun Jun 02 22:59:51 2013 +0000 @@ -2,7 +2,7 @@ #include "mbed.h" #include "HTTPRequestHandler.h" -#define _DEBUG 1 +#define _DEBUG 0 #if (_DEBUG && !defined(TARGET_LPC11U24)) #define INFO(x, ...) std::printf("[HTTPRequestHandler : DBG]"x"\r\n", ##__VA_ARGS__); @@ -16,6 +16,14 @@ 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) { @@ -65,7 +73,7 @@ { INFO("Handling error !"); tcp.set_blocking(true, 1500); - sprintf(buffer,"HTTP/1.0 %d Error\r\n", errorCode); + 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)); @@ -90,13 +98,17 @@ { INFO("Starting response (%ld bytes in total)!", nLen); tcp.set_blocking(true, 1500); - sprintf(buffer, "HTTP/1.0 %d OK\r\n", returnCode); - tcp.send(buffer, strlen(buffer)); + sprintf(buffer, "HTTP/1.1 %d OK\r\n", returnCode); + tcp.send_all(buffer, strlen(buffer)); + tcp.send_all((char*)hdrConClose, strlen(hdrConClose)); sprintf(buffer, "Content-Length: %ld\r\n", nLen); // Add 2 chars for the terminating CR+LF - tcp.send(buffer, strlen(buffer)); + tcp.send_all(buffer, strlen(buffer)); if (header == NULL) { - sprintf(buffer, "Content-Type: text/html\r\nServer: mbed embedded\r\n\r\n"); - tcp.send(buffer, strlen(buffer)); + tcp.send_all((char*)hdrDNT, strlen(hdrDNT)); + tcp.send_all((char*)hdrMaxAge, strlen(hdrMaxAge)); + tcp.send_all((char*)hdrContent, strlen(hdrContent)); + tcp.send_all((char*)hdrServer, strlen(hdrServer)); + tcp.send_all((char*)hdrEndl, strlen(hdrEndl)); } else { for ( map<const char*, const char*>::iterator cIter = header->begin() ; cIter != header->end() ; cIter ++) { @@ -105,7 +117,7 @@ tcp.send((char*)cIter->second, strlen(cIter->second)); tcp.send("\r\n\r\n",2); } - tcp.send("\r\n", 2); + tcp.send_all("\r\n", 2); } // other content must be sent using the 'processResponse' function } @@ -113,11 +125,11 @@ void HTTPRequestHandler::processResponse(int nLen, char* body) { INFO("Processing Response (%d bytes)!\n",nLen); - tcp.send(body, nLen); + tcp.send_all(body, nLen); } void HTTPRequestHandler::endResponse() { INFO("Ending Response !"); - tcp.send("\r\n", 2); +// tcp.send("\r\n\r\n", 4); }