Team E1

Fork of HTTPServer by Sam Kirsch

Committer:
leihen
Date:
Sun May 26 23:22:36 2013 +0000
Revision:
2:8653bbcf7e58
Parent:
1:6b7472d5e9ee
Child:
3:d6224049b3bf
Optimized for RAM.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
leihen 0:7a2421e63e74 1 /* HTTPServer.cpp */
leihen 0:7a2421e63e74 2 #ifndef __HTTPSERVER_H__
leihen 0:7a2421e63e74 3 #define __HTTPSERVER_H__
leihen 0:7a2421e63e74 4 #include "mbed.h"
leihen 0:7a2421e63e74 5 #include "HTTPConnection.h"
leihen 1:6b7472d5e9ee 6 #include "HTTPRequestHandler.h"
leihen 1:6b7472d5e9ee 7
leihen 1:6b7472d5e9ee 8 #include <map>
leihen 1:6b7472d5e9ee 9 using std::map;
leihen 1:6b7472d5e9ee 10 #include <string>
leihen 1:6b7472d5e9ee 11 using std::string;
leihen 0:7a2421e63e74 12
leihen 0:7a2421e63e74 13 #include <TCPSocketConnection.h>
leihen 0:7a2421e63e74 14 #include <TCPSocketServer.h>
leihen 0:7a2421e63e74 15
leihen 1:6b7472d5e9ee 16 typedef void (*HTTPRequestHandlerFunction)(HTTPMessage&, TCPSocketConnection&);
leihen 1:6b7472d5e9ee 17
leihen 0:7a2421e63e74 18 /** Class HTTPServer for WiFly Interface Library
leihen 0:7a2421e63e74 19 *
leihen 0:7a2421e63e74 20 */
leihen 0:7a2421e63e74 21 class HTTPServer
leihen 0:7a2421e63e74 22 {
leihen 0:7a2421e63e74 23
leihen 0:7a2421e63e74 24 public:
leihen 0:7a2421e63e74 25 HTTPServer(Serial* pDbg = NULL);
leihen 0:7a2421e63e74 26 ~HTTPServer();
leihen 1:6b7472d5e9ee 27
leihen 1:6b7472d5e9ee 28
leihen 0:7a2421e63e74 29 struct handlersComp //Used to order handlers in the right way
leihen 0:7a2421e63e74 30 {
leihen 0:7a2421e63e74 31 bool operator() (const string& handler1, const string& handler2) const
leihen 0:7a2421e63e74 32 {
leihen 0:7a2421e63e74 33 //The first handler is longer than the second one
leihen 0:7a2421e63e74 34 if (handler1.length() > handler2.length())
leihen 0:7a2421e63e74 35 return true; //Returns true if handler1 is to appear before handler2
leihen 0:7a2421e63e74 36 else if (handler1.length() < handler2.length())
leihen 0:7a2421e63e74 37 return false;
leihen 0:7a2421e63e74 38 else //To avoid the == case, sort now by address
leihen 0:7a2421e63e74 39 return ((&handler1)>(&handler2));
leihen 0:7a2421e63e74 40 }
leihen 0:7a2421e63e74 41 };
leihen 1:6b7472d5e9ee 42
leihen 0:7a2421e63e74 43 ///Adds a handler
leihen 0:7a2421e63e74 44 /**
leihen 0:7a2421e63e74 45 Appends a handler to the handlers list
leihen 0:7a2421e63e74 46 @param T : class which will be instanciated to serve these requests
leihen 0:7a2421e63e74 47 @param path : requests starting with this path will be served using this handler
leihen 0:7a2421e63e74 48 */
leihen 0:7a2421e63e74 49 // template<typename T>
leihen 0:7a2421e63e74 50 // void addHandler(const char* path) //Template decl in header
leihen 1:6b7472d5e9ee 51 // { m_pHandlers[path] = &T::inst; }
leihen 1:6b7472d5e9ee 52
leihen 1:6b7472d5e9ee 53 void addHandler(const char* path, HTTPRequestHandlerFunction hdlFunc)
leihen 1:6b7472d5e9ee 54 { m_pHandlers[path] = hdlFunc; }
leihen 2:8653bbcf7e58 55
leihen 2:8653bbcf7e58 56 void addErrorHandler(HTTPRequestHandlerFunction hdlFunc)
leihen 2:8653bbcf7e58 57 { m_pErrorHandler = hdlFunc!=NULL ?hdlFunc : StdErrorHandler; }
leihen 0:7a2421e63e74 58 ///Starts listening
leihen 0:7a2421e63e74 59 /**
leihen 0:7a2421e63e74 60 Binds server to a specific port and starts listening. This member prepares the internal variables and the server socket
leihen 0:7a2421e63e74 61 and terminates after successfull initialization
leihen 0:7a2421e63e74 62 @param port : port on which to listen for incoming connections
leihen 0:7a2421e63e74 63 @returns : -1 if an unrecoverable error occured, or 0 if everything was ok.
leihen 0:7a2421e63e74 64 */
leihen 0:7a2421e63e74 65 int start(int port = 80);
leihen 0:7a2421e63e74 66
leihen 0:7a2421e63e74 67 /**
leihen 0:7a2421e63e74 68 Performs the regular polling of the server component. Needs to be called cyclically.
leihen 0:7a2421e63e74 69 The function will internally check whether new connections are requested by a client and will also poll all existing client connections.
leihen 0:7a2421e63e74 70 */
leihen 0:7a2421e63e74 71 int poll();
leihen 0:7a2421e63e74 72
leihen 0:7a2421e63e74 73 private:
leihen 0:7a2421e63e74 74
leihen 2:8653bbcf7e58 75 static void StdErrorHandler(HTTPMessage&, TCPSocketConnection&);
leihen 2:8653bbcf7e58 76
leihen 0:7a2421e63e74 77 TCPSocketServer* m_pSvr;
leihen 0:7a2421e63e74 78 bool m_bServerListening;
leihen 0:7a2421e63e74 79
leihen 0:7a2421e63e74 80 Serial* m_pDbg;
leihen 1:6b7472d5e9ee 81 void HandleRequest(HTTPMessage& con, TCPSocketConnection&);
leihen 1:6b7472d5e9ee 82
leihen 1:6b7472d5e9ee 83 map<string, HTTPRequestHandlerFunction> m_pHandlers;
leihen 2:8653bbcf7e58 84 HTTPRequestHandlerFunction m_pErrorHandler;
leihen 2:8653bbcf7e58 85
leihen 0:7a2421e63e74 86 };
leihen 0:7a2421e63e74 87
leihen 0:7a2421e63e74 88 #endif //__HTTPSERVER_H__