This version has the index file and data pages on a SD card (512Mbyte) it does not suffer from the autorun problem when directly writtin to the mbed flash memory It makes readings from one solar panel for open and loaded voltages every 'interval' seconds Every readingsPerPage a new web page is created and indexed on a readings web page Activty is shown by the flashing blue led (0.5s) means it is connected and output via the serial over usb port. Data is preserved on subsequent power ups by incrementing file number. PMR 15/9/10 */

Dependencies:   EthernetNetIf NTPClient_NetServices mbed SDFileSystem

Committer:
pmr1
Date:
Sat Sep 18 13:31:41 2010 +0000
Revision:
0:d6b2d5c4c48f

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pmr1 0:d6b2d5c4c48f 1
pmr1 0:d6b2d5c4c48f 2 /*
pmr1 0:d6b2d5c4c48f 3 Copyright (c) 2010 Donatien Garnier (donatiengar [at] gmail [dot] com)
pmr1 0:d6b2d5c4c48f 4
pmr1 0:d6b2d5c4c48f 5 Permission is hereby granted, free of charge, to any person obtaining a copy
pmr1 0:d6b2d5c4c48f 6 of this software and associated documentation files (the "Software"), to deal
pmr1 0:d6b2d5c4c48f 7 in the Software without restriction, including without limitation the rights
pmr1 0:d6b2d5c4c48f 8 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
pmr1 0:d6b2d5c4c48f 9 copies of the Software, and to permit persons to whom the Software is
pmr1 0:d6b2d5c4c48f 10 furnished to do so, subject to the following conditions:
pmr1 0:d6b2d5c4c48f 11
pmr1 0:d6b2d5c4c48f 12 The above copyright notice and this permission notice shall be included in
pmr1 0:d6b2d5c4c48f 13 all copies or substantial portions of the Software.
pmr1 0:d6b2d5c4c48f 14
pmr1 0:d6b2d5c4c48f 15 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
pmr1 0:d6b2d5c4c48f 16 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
pmr1 0:d6b2d5c4c48f 17 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
pmr1 0:d6b2d5c4c48f 18 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
pmr1 0:d6b2d5c4c48f 19 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
pmr1 0:d6b2d5c4c48f 20 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
pmr1 0:d6b2d5c4c48f 21 THE SOFTWARE.
pmr1 0:d6b2d5c4c48f 22 */
pmr1 0:d6b2d5c4c48f 23
pmr1 0:d6b2d5c4c48f 24 /** \file
pmr1 0:d6b2d5c4c48f 25 HTTP Server header file
pmr1 0:d6b2d5c4c48f 26 */
pmr1 0:d6b2d5c4c48f 27
pmr1 0:d6b2d5c4c48f 28 #ifndef HTTP_SERVER_H
pmr1 0:d6b2d5c4c48f 29 #define HTTP_SERVER_H
pmr1 0:d6b2d5c4c48f 30
pmr1 0:d6b2d5c4c48f 31 class HTTPRequestHandler;
pmr1 0:d6b2d5c4c48f 32 class HTTPRequestDispatcher;
pmr1 0:d6b2d5c4c48f 33
pmr1 0:d6b2d5c4c48f 34 #include "core/net.h"
pmr1 0:d6b2d5c4c48f 35 #include "HTTPRequestHandler.h"
pmr1 0:d6b2d5c4c48f 36 #include "HTTPRequestDispatcher.h"
pmr1 0:d6b2d5c4c48f 37
pmr1 0:d6b2d5c4c48f 38 #include <string>
pmr1 0:d6b2d5c4c48f 39 using std::string;
pmr1 0:d6b2d5c4c48f 40
pmr1 0:d6b2d5c4c48f 41 #include <map>
pmr1 0:d6b2d5c4c48f 42 using std::map;
pmr1 0:d6b2d5c4c48f 43
pmr1 0:d6b2d5c4c48f 44 ///A simple HTTP server implementation
pmr1 0:d6b2d5c4c48f 45 /**
pmr1 0:d6b2d5c4c48f 46 The HTTPServer is composed of:
pmr1 0:d6b2d5c4c48f 47 - The actual server (HTTPServer)
pmr1 0:d6b2d5c4c48f 48 - A request dispatcher, instanciated on each request (HTTPRequestDispatcher)
pmr1 0:d6b2d5c4c48f 49 - Request handlers instanciated by the dispatcher(deriving from HTTPRequestHandler)
pmr1 0:d6b2d5c4c48f 50 */
pmr1 0:d6b2d5c4c48f 51 class HTTPServer
pmr1 0:d6b2d5c4c48f 52 {
pmr1 0:d6b2d5c4c48f 53 public:
pmr1 0:d6b2d5c4c48f 54 ///Instantiates the HTTP Server
pmr1 0:d6b2d5c4c48f 55 HTTPServer();
pmr1 0:d6b2d5c4c48f 56 ~HTTPServer();
pmr1 0:d6b2d5c4c48f 57
pmr1 0:d6b2d5c4c48f 58 struct handlersComp //Used to order handlers in the right way
pmr1 0:d6b2d5c4c48f 59 {
pmr1 0:d6b2d5c4c48f 60 bool operator() (const string& handler1, const string& handler2) const
pmr1 0:d6b2d5c4c48f 61 {
pmr1 0:d6b2d5c4c48f 62 //The first handler is longer than the second one
pmr1 0:d6b2d5c4c48f 63 if (handler1.length() > handler2.length())
pmr1 0:d6b2d5c4c48f 64 return true; //Returns true if handler1 is to appear before handler2
pmr1 0:d6b2d5c4c48f 65 else if (handler1.length() < handler2.length())
pmr1 0:d6b2d5c4c48f 66 return false;
pmr1 0:d6b2d5c4c48f 67 else //To avoid the == case, sort now by address
pmr1 0:d6b2d5c4c48f 68 return ((&handler1)>(&handler2));
pmr1 0:d6b2d5c4c48f 69 }
pmr1 0:d6b2d5c4c48f 70 };
pmr1 0:d6b2d5c4c48f 71
pmr1 0:d6b2d5c4c48f 72 ///Adds a handler
pmr1 0:d6b2d5c4c48f 73 /**
pmr1 0:d6b2d5c4c48f 74 Appends a handler to the handlers list
pmr1 0:d6b2d5c4c48f 75 @param T : class which will be instanciated to serve these requests
pmr1 0:d6b2d5c4c48f 76 @param path : requests starting with this path will be served using this handler
pmr1 0:d6b2d5c4c48f 77 */
pmr1 0:d6b2d5c4c48f 78 template<typename T>
pmr1 0:d6b2d5c4c48f 79 void addHandler(const char* path) //Template decl in header
pmr1 0:d6b2d5c4c48f 80 { m_lpHandlers[path] = &T::inst; }
pmr1 0:d6b2d5c4c48f 81
pmr1 0:d6b2d5c4c48f 82 ///Starts listening
pmr1 0:d6b2d5c4c48f 83 /**
pmr1 0:d6b2d5c4c48f 84 Binds server to a specific port and starts listening
pmr1 0:d6b2d5c4c48f 85 @param port : port on which to listen for incoming connections
pmr1 0:d6b2d5c4c48f 86 */
pmr1 0:d6b2d5c4c48f 87 void bind(int port = 80);
pmr1 0:d6b2d5c4c48f 88
pmr1 0:d6b2d5c4c48f 89 private:
pmr1 0:d6b2d5c4c48f 90 friend class HTTPRequestDispatcher;
pmr1 0:d6b2d5c4c48f 91
pmr1 0:d6b2d5c4c48f 92 void onTCPSocketEvent(TCPSocketEvent e);
pmr1 0:d6b2d5c4c48f 93
pmr1 0:d6b2d5c4c48f 94 TCPSocket* m_pTCPSocket;
pmr1 0:d6b2d5c4c48f 95 map< string, HTTPRequestHandler*(*)(const char*, const char*, TCPSocket*), handlersComp > m_lpHandlers;
pmr1 0:d6b2d5c4c48f 96
pmr1 0:d6b2d5c4c48f 97 };
pmr1 0:d6b2d5c4c48f 98
pmr1 0:d6b2d5c4c48f 99 //Including handlers here for more convenience
pmr1 0:d6b2d5c4c48f 100 #include "impl/RPCHandler.h"
pmr1 0:d6b2d5c4c48f 101 #include "impl/FSHandler.h"
pmr1 0:d6b2d5c4c48f 102 #include "impl/SimpleHandler.h"
pmr1 0:d6b2d5c4c48f 103
pmr1 0:d6b2d5c4c48f 104 #endif