Handle HTTP Post Method
Dependencies: EthernetNetIf HTTPServer mbed
PostHandler.cpp
- Committer:
- nobuki
- Date:
- 2012-12-01
- Revision:
- 0:5ec5448dc8c5
File content as of revision 0:5ec5448dc8c5:
#include "PostHandler.h" //#define __DEBUG #include <dbg.h> #define DELIMITER ("&") extern bool g_bLed1; extern bool g_bLed2; extern bool g_bLed3; extern int g_iSpeed; extern double g_dInterval; AnalogIn g_ain_brightness(p15); AnalogIn g_ain_temperature(p20); PostHandler::PostHandler(const char* rootPath, const char* path, TCPSocket* pTCPSocket) : HTTPRequestHandler(rootPath, path, pTCPSocket) { DBG("PostHandler()\r\n"); } PostHandler::~PostHandler() { DBG("~PostHandler()\r\n"); } void PostHandler::printString( const char* pszString ) { writeData( pszString, strlen(pszString) ); } void PostHandler::printHtml() { respHeaders()["Connection"] = "close"; printString("<html>"); printString("<head>\n"); printString("<title></title>\n"); printString("</head>\n"); printString("<body>\n"); printString("<p>\n"); printString("LED1 : "); printString( g_bLed1 ? "ON" : "off" ); printString("<br>\n"); printString("LED2 : "); printString( g_bLed2 ? "ON" : "off" ); printString("<br>\n"); printString("LED3 : "); printString( g_bLed3 ? "ON" : "off" ); printString("<br>\n"); printString("<br>\n"); printString("Speed: \n"); char szSpeed[10]; sprintf( szSpeed, "%d", g_iSpeed ); printString( szSpeed ); printString("</p>\n"); printString("<hr>\n"); printString("<form method=\"post\" action=\"\">\n"); printString("<label><input type=\"checkbox\" name=\"led1\" value=\"1\""); if(g_bLed1){ printString(" checked"); } printString(">LED1</label><br><br>\n"); printString("<label><input type=\"checkbox\" name=\"led2\" value=\"1\""); if(g_bLed2){ printString(" checked"); } printString(">LED2</label><br><br>\n"); printString("<label><input type=\"checkbox\" name=\"led3\" value=\"1\""); if(g_bLed3){ printString(" checked"); } printString(">LED3</label><br><br>\n"); printString("Speed<br>\n"); printString("<label><input type=\"radio\" name=\"speed\" value=\"1\""); if(1==g_iSpeed){ printString(" checked"); } printString("> 1 </label> \n"); printString("<label><input type=\"radio\" name=\"speed\" value=\"2\""); if(2==g_iSpeed){ printString(" checked"); } printString("> 2 </label> \n"); printString("<label><input type=\"radio\" name=\"speed\" value=\"3\""); if(3==g_iSpeed){ printString(" checked"); } printString("> 3 </label> \n"); printString("<label><input type=\"radio\" name=\"speed\" value=\"4\""); if(4==g_iSpeed){ printString(" checked"); } printString("> 4 </label> \n"); printString("<label><input type=\"radio\" name=\"speed\" value=\"5\""); if(5==g_iSpeed){ printString(" checked"); } printString("> 5 </label> \n"); printString("<label><input type=\"radio\" name=\"speed\" value=\"6\""); if(6==g_iSpeed){ printString(" checked"); } printString("> 6 </label> \n"); printString("<label><input type=\"radio\" name=\"speed\" value=\"7\""); if(7==g_iSpeed){ printString(" checked"); } printString("> 7 </label> \n"); printString("<label><input type=\"radio\" name=\"speed\" value=\"8\""); if(8==g_iSpeed){ printString(" checked"); } printString("> 8 </label> \n"); printString("<label><input type=\"radio\" name=\"speed\" value=\"9\""); if(9==g_iSpeed){ printString(" checked"); } printString("> 9 </label> \n"); printString("<br>\n"); printString("<br>\n"); printString("<br>\n"); printString("<input type=\"submit\" value=\"Send\">\n"); printString("</form>\n"); printString("</body>\n"); printString("</html>"); } void PostHandler::doGet() { DBG("doGet()\r\n"); printHtml(); } static void analyzePostData( char* pszLine, bool& rbLed1, bool& rbLed2, bool& rbLed3, int& riSpeed ) { rbLed1 = false; rbLed2 = false; rbLed3 = false; riSpeed = 5; char* pszToken = strtok(pszLine, DELIMITER); while(pszToken) { if( 6 == strlen(pszToken) && 0 == strncmp(pszToken, "led", 3) ) { // led?=1 if( '1' == pszToken[3] ){ rbLed1 = true; } else if( '2' == pszToken[3] ){ rbLed2 = true; } else if( '3' == pszToken[3] ){ rbLed3 = true; } } else if( 7 == strlen(pszToken) && 0 == strncmp(pszToken, "speed", 5) ) { // speed=? riSpeed = pszToken[6] - '0'; } pszToken = strtok(NULL, DELIMITER); } } void PostHandler::doPost() { DBG("doPost()\r\n"); int iCountData = dataLen(); if( 0 == iCountData ) { printHtml(); return; } char* pszData = (char*) malloc( sizeof(char) * (iCountData + 1) ); readData( pszData, iCountData ); pszData[iCountData] = '\0'; DBG( pszData ); bool bLed1, bLed2, bLed3; int iSpeed; analyzePostData( pszData, bLed1, bLed2, bLed3, iSpeed ); g_bLed1 = bLed1; g_bLed2 = bLed2; g_bLed3 = bLed3; g_iSpeed = iSpeed; g_dInterval = 0.5 + (g_iSpeed - 1) * (0.01 - 0.5) / (9 - 1); printHtml(); } void PostHandler::doHead() { DBG("doHead()\r\n"); } void PostHandler::onReadable() //Data has been read { DBG("onReadable()\r\n"); } void PostHandler::onWriteable() //Data has been written & buf is free { DBG("onWriteable()\r\n"); close(); //Data written, we can close the connection } void PostHandler::onClose() //Connection is closing { DBG("onClose()\r\n"); }