Changes made for RPC

Committer:
leihen
Date:
Sun May 26 22:49:42 2013 +0000
Revision:
1:6b7472d5e9ee
Parent:
0:7a2421e63e74
Child:
2:8653bbcf7e58
Basic functionality demonstrated. One issue exists with error pages, which does not work 100%
;

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 0:7a2421e63e74 55
leihen 0:7a2421e63e74 56 ///Starts listening
leihen 0:7a2421e63e74 57 /**
leihen 0:7a2421e63e74 58 Binds server to a specific port and starts listening. This member prepares the internal variables and the server socket
leihen 0:7a2421e63e74 59 and terminates after successfull initialization
leihen 0:7a2421e63e74 60 @param port : port on which to listen for incoming connections
leihen 0:7a2421e63e74 61 @returns : -1 if an unrecoverable error occured, or 0 if everything was ok.
leihen 0:7a2421e63e74 62 */
leihen 0:7a2421e63e74 63 int start(int port = 80);
leihen 0:7a2421e63e74 64
leihen 0:7a2421e63e74 65 /**
leihen 0:7a2421e63e74 66 Performs the regular polling of the server component. Needs to be called cyclically.
leihen 0:7a2421e63e74 67 The function will internally check whether new connections are requested by a client and will also poll all existing client connections.
leihen 0:7a2421e63e74 68 */
leihen 0:7a2421e63e74 69 int poll();
leihen 0:7a2421e63e74 70
leihen 0:7a2421e63e74 71 private:
leihen 0:7a2421e63e74 72
leihen 0:7a2421e63e74 73 TCPSocketServer* m_pSvr;
leihen 0:7a2421e63e74 74 bool m_bServerListening;
leihen 0:7a2421e63e74 75
leihen 0:7a2421e63e74 76 Serial* m_pDbg;
leihen 1:6b7472d5e9ee 77 void HandleRequest(HTTPMessage& con, TCPSocketConnection&);
leihen 1:6b7472d5e9ee 78
leihen 1:6b7472d5e9ee 79 map<string, HTTPRequestHandlerFunction> m_pHandlers;
leihen 0:7a2421e63e74 80 };
leihen 0:7a2421e63e74 81
leihen 0:7a2421e63e74 82 #endif //__HTTPSERVER_H__