Simple HTTP example
Dependencies: LWIPInterface NetworkSocketAPI events funcptr mbed-rtos mbed
SimpleHTTP.h@1:ca2041d3a4a6, 2016-04-22 (annotated)
- Committer:
- Christopher Haster
- Date:
- Fri Apr 22 03:21:03 2016 -0500
- Revision:
- 1:ca2041d3a4a6
- Parent:
- 0:9dd004b6a8b7
Match changes to events and take advantage of EventLoop
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Christopher Haster |
0:9dd004b6a8b7 | 1 | /* |
Christopher Haster |
0:9dd004b6a8b7 | 2 | * Dumb HTTP server |
Christopher Haster |
0:9dd004b6a8b7 | 3 | */ |
Christopher Haster |
0:9dd004b6a8b7 | 4 | #ifndef SIMPLE_HTTP_H |
Christopher Haster |
0:9dd004b6a8b7 | 5 | #define SIMPLE_HTTP_H |
Christopher Haster |
0:9dd004b6a8b7 | 6 | |
Christopher Haster |
0:9dd004b6a8b7 | 7 | #include "FuncPtr.h" |
Christopher Haster |
1:ca2041d3a4a6 | 8 | #include "EventLoop.h" |
Christopher Haster |
0:9dd004b6a8b7 | 9 | #include "Event.h" |
Christopher Haster |
0:9dd004b6a8b7 | 10 | #include "TCPServer.h" |
Christopher Haster |
0:9dd004b6a8b7 | 11 | #include <map> |
Christopher Haster |
0:9dd004b6a8b7 | 12 | #include <string> |
Christopher Haster |
0:9dd004b6a8b7 | 13 | |
Christopher Haster |
0:9dd004b6a8b7 | 14 | /** Simple HTTP server |
Christopher Haster |
0:9dd004b6a8b7 | 15 | */ |
Christopher Haster |
0:9dd004b6a8b7 | 16 | class SimpleHTTP { |
Christopher Haster |
0:9dd004b6a8b7 | 17 | public: |
Christopher Haster |
0:9dd004b6a8b7 | 18 | /** SimpleHTTP server lifetime |
Christopher Haster |
0:9dd004b6a8b7 | 19 | */ |
Christopher Haster |
1:ca2041d3a4a6 | 20 | SimpleHTTP(NetworkStack *stack); |
Christopher Haster |
0:9dd004b6a8b7 | 21 | ~SimpleHTTP(); |
Christopher Haster |
0:9dd004b6a8b7 | 22 | |
Christopher Haster |
0:9dd004b6a8b7 | 23 | /** Start serving HTTP requests |
Christopher Haster |
0:9dd004b6a8b7 | 24 | */ |
Christopher Haster |
0:9dd004b6a8b7 | 25 | void start(); |
Christopher Haster |
0:9dd004b6a8b7 | 26 | |
Christopher Haster |
0:9dd004b6a8b7 | 27 | /** Stop serving HTTP requests |
Christopher Haster |
0:9dd004b6a8b7 | 28 | */ |
Christopher Haster |
0:9dd004b6a8b7 | 29 | void stop(); |
Christopher Haster |
0:9dd004b6a8b7 | 30 | |
Christopher Haster |
0:9dd004b6a8b7 | 31 | /** Attach on GET request |
Christopher Haster |
0:9dd004b6a8b7 | 32 | */ |
Christopher Haster |
0:9dd004b6a8b7 | 33 | void get(const char *path, FuncPtr<int(char *, unsigned)> callback); |
Christopher Haster |
0:9dd004b6a8b7 | 34 | |
Christopher Haster |
0:9dd004b6a8b7 | 35 | template <typename T, typename M> |
Christopher Haster |
0:9dd004b6a8b7 | 36 | void get(const char *path, T *obj, M method) { |
Christopher Haster |
0:9dd004b6a8b7 | 37 | get(path, FuncPtr<int(char *, unsigned)>(obj, method)); |
Christopher Haster |
0:9dd004b6a8b7 | 38 | } |
Christopher Haster |
0:9dd004b6a8b7 | 39 | |
Christopher Haster |
0:9dd004b6a8b7 | 40 | /** Get stats |
Christopher Haster |
0:9dd004b6a8b7 | 41 | */ |
Christopher Haster |
0:9dd004b6a8b7 | 42 | unsigned get_errors(); |
Christopher Haster |
0:9dd004b6a8b7 | 43 | unsigned get_accepts(); |
Christopher Haster |
0:9dd004b6a8b7 | 44 | unsigned get_sent(); |
Christopher Haster |
0:9dd004b6a8b7 | 45 | unsigned get_recv(); |
Christopher Haster |
0:9dd004b6a8b7 | 46 | |
Christopher Haster |
0:9dd004b6a8b7 | 47 | private: |
Christopher Haster |
1:ca2041d3a4a6 | 48 | EventLoop _loop; |
Christopher Haster |
0:9dd004b6a8b7 | 49 | NetworkStack *_stack; |
Christopher Haster |
0:9dd004b6a8b7 | 50 | TCPServer _server; |
Christopher Haster |
0:9dd004b6a8b7 | 51 | std::map<std::string, FuncPtr<int(char *, unsigned)> > _get_cbs; |
Christopher Haster |
0:9dd004b6a8b7 | 52 | |
Christopher Haster |
0:9dd004b6a8b7 | 53 | struct { |
Christopher Haster |
0:9dd004b6a8b7 | 54 | unsigned errors; |
Christopher Haster |
0:9dd004b6a8b7 | 55 | unsigned accepts; |
Christopher Haster |
0:9dd004b6a8b7 | 56 | unsigned sent; |
Christopher Haster |
0:9dd004b6a8b7 | 57 | unsigned recv; |
Christopher Haster |
0:9dd004b6a8b7 | 58 | } _stats; |
Christopher Haster |
0:9dd004b6a8b7 | 59 | |
Christopher Haster |
0:9dd004b6a8b7 | 60 | Event<void()> _net_event; |
Christopher Haster |
0:9dd004b6a8b7 | 61 | int _handle(char *buffer); |
Christopher Haster |
0:9dd004b6a8b7 | 62 | void _net_cb(); |
Christopher Haster |
0:9dd004b6a8b7 | 63 | }; |
Christopher Haster |
0:9dd004b6a8b7 | 64 | |
Christopher Haster |
0:9dd004b6a8b7 | 65 | #endif |