Team E1

Fork of HTTPServer by Sam Kirsch

Revision:
13:aa5338a5e452
Parent:
12:ba81cc117fb6
Child:
14:011edcd33e86
diff -r ba81cc117fb6 -r aa5338a5e452 HTTPServer.cpp
--- a/HTTPServer.cpp	Wed Jun 05 23:39:24 2013 +0000
+++ b/HTTPServer.cpp	Sat Jun 22 15:41:34 2013 +0000
@@ -1,7 +1,9 @@
 #include "mbed.h"
 #include "HTTPServer.h"
+#define DEBUG
+#include "debug.h"
 
-#define _DEBUG      0
+#define _DEBUG      1
 
 #ifdef _DEBUG
 DigitalOut led1(LED1);
@@ -10,32 +12,17 @@
 DigitalOut led4(LED4);
 #endif
 
-#if (_DEBUG && !defined(TARGET_LPC11U24))
-#define INFO(x, ...) std::printf("[HttpServer : DBG]"x"\r\n", ##__VA_ARGS__);
-#define WARN(x, ...) std::printf("[HttpServer : DBG]"x"\r\n", ##__VA_ARGS__);
-#define ERR(x, ...) std::printf("[HttpServer : DBG]"x"\r\n", ##__VA_ARGS__);
-#else
-#define INFO(x, ...)
-#define WARN(x, ...)
-#define ERR(x, ...)
-#endif
-
+static EthernetInterface eth;
 
 /* Constructor */
 /* initialize all members and set the standard error handler. */
-HTTPServer::HTTPServer(PinName tx, PinName rx, PinName reset, PinName tcp_status, const char * ssid, const char * phrase, Security sec)
-    : m_wifly(tx, rx, reset, tcp_status, ssid, phrase, sec)
+HTTPServer::HTTPServer()
 {
     m_pErrorHandler = StdErrorHandler;
-    m_pSvr = NULL;
 }
 
 HTTPServer::~HTTPServer()
 {
-    if (m_pSvr) {
-        delete m_pSvr;
-        m_pSvr = NULL;
-    }
 }
 
 
@@ -51,93 +38,47 @@
 }
 
 
-int HTTPServer::start(int port)
+bool HTTPServer::start(int port)
 {
-    // check if the start member was called already once
-    if (m_pSvr != NULL) {
-        ERR("start function was already called, server is already in listening state.");
-        return -1;
-    }
-    INFO("Initializing wifly\n");    
-    //  Initialize the wifly wlan device
-    m_wifly.init();
+    INFO("Initializing network\n");
+    eth.init();
 
     INFO("Connecting to network...");
-    //  Try join the network
-    while(!m_wifly.connect()) {
-        INFO("Failed to connect. Trying again\n");
-        m_wifly.reset();
-    }
-    INFO("connected\n");
+    eth.connect();
 
-    // check if the start member was called already once
-    if (m_pSvr != NULL) {
-        ERR("start function was already called, server is already in listening state.");
-        return -1;
-    }
-    
-    //  Create a new server object
-    m_pSvr = new TCPSocketServer();
-    
-    //  Bind the local server to the given port
-    if (m_pSvr->bind(port) < 0) {
-        ERR("Failed to bind to port %d\n", port);
-        return -1;
-    }
-    else {
-        INFO("Binding succeeded !\n");
+    INFO("Binding to port %d...", port);
+    if (m_Svr.bind(port) < 0) {
+        ERR("Failed to bind to port !\n");
+        error("Binding");
+        return false;
     }
 
-    //  Listen to a maximum of 10 concurrent connections
-    if (m_pSvr->listen(1) < 0) {
-        ERR("Faild to listen !\n");
-        delete m_pSvr;
-        m_pSvr = NULL;
-        return -1;
-    }
-    else {
-        INFO("Listening\n");
+    INFO("Listening ...");
+    if (m_Svr.listen(1) < 0) {
+        ERR("Failed to listen !\n");
+        error("Listening");
+        return false;
     }
 
+    ERR("Connected !");
     //  set into non blocking operation
-    m_pSvr->set_blocking(false, 100);
-    
-    return 0;
+    m_Svr.set_blocking(false, 100);
+
+    return true;
 }
 
 
 int HTTPServer::poll(bool blocking)
-{    
+{
     int retval = -1;
-    INFO("Listening for new connection requests.");
 
+#ifdef _DEBUG
+    led4 = 1;   //  Indicate we are waiting for a new connection
+#endif
     //  This thread basically checks if there is a new incoming connection.
     //  If so , a new HTTPConnection is created and the connection thread is started.
     TCPSocketConnection Clnt;
-
-#ifdef _DEBUG
-    led4 = 1;   //  Indicate we are waiting for a new connection 
-#endif
-    m_pSvr->set_blocking(blocking); 
-    retval = m_pSvr->accept(Clnt);
-    if (retval > 0) {
-        // no connection availale yet, so just return
-#ifdef _DEBUG
-led4 = 0;
-led3 = 0;
-led2 = 0;
-#endif
-        return retval;
-    }
-    if ( retval < 0) {
-        //  an error occured 
-        ERR("There was an error, Accept returned with an error. Probably the connection to the router was lost. Shutting down server");
-#ifdef _DEBUG
-        led2 = 0;
-#endif 
-        m_pSvr->close();
-        delete m_pSvr;
-        m_pSvr = NULL;
+    if (m_Svr.accept(Clnt) < 0) {
 #ifdef _DEBUG
         led4 = 0;
         led3 = 1;   //  ERROR
@@ -146,40 +87,35 @@
 #endif
         return -1;
     }
-    else {
+
+    //   a new connection was received
+    INFO("Client (IP=%s) is connected !\n", Clnt.get_address());
+#ifdef _DEBUG
+    led4 = 0;
+    led3 = 0;
+    led2 = 0;
+#endif
+
 #ifdef _DEBUG
-        led4 = 0;
-#endif 
-        //   a new connection was received
-        INFO("Client (IP=%s) is connected !\n", Clnt.get_address());
-        //  Start the main connection thread
-//        while(1) {
-            
-    #ifdef _DEBUG
-            led3 = 1;
-            led2 = 1;
-    #endif
-            HTTPConnection con;
-            int c = con.poll();
-            if (c == 0) {
-                //  Handle the request
-                HandleRequest(con.m_Msg, Clnt);
-//                INFO("Closing connection.\n");
-//                if (!m_wifly.close()) {
-//                    ERR("Failed to close connection !\n");
-//                }
-            }
-            if (c == -1) {
-                // No more data available or error
- //               break;
-            }
-    #ifdef _DEBUG
-            led2 = 0;
-            led3 = 0;
-    #endif
-//        }
+    led3 = 1;
+    led2 = 1;
+#endif
+    HTTPConnection con(Clnt);
+    int c = con.poll();
+    if (c == 0) {
+        //  Handle the request
+        INFO("Handling request !");
+        HandleRequest(con.m_Msg, Clnt);
     }
-    
+    if (c == -1) {
+//        break;
+    }
+#ifdef _DEBUG
+    led2 = 0;
+    led3 = 0;
+#endif
+
+
     INFO("Leaving polling thread");
     return 0;
 }
@@ -200,14 +136,13 @@
             break;
         }
     }
-    
+
     if (it == m_lpHandlers.end()) {
         //  There is no such handler, so return invalid
 
-        m_pErrorHandler(msg, tcp);        
+        m_pErrorHandler(msg, tcp);
         INFO("Webrequest left unhandled.");
-    }
-    else {
+    } else {
         //  Valid handler was found
         INFO("Routing webrequest !");
         //  Instantiate the handler object (handling will be done from withing the object's constructor