Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of HTTPServer by
HTTPServer.h@2:8653bbcf7e58, 2013-05-26 (annotated)
- 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?
| User | Revision | Line number | New 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__ |
