Simple HTTP example

Dependencies:   LWIPInterface NetworkSocketAPI events funcptr mbed-rtos mbed

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?

UserRevisionLine numberNew 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