John Lowe
/
WebSockets2
Embedded WebSockets Experiment
HTTPWebSocketHandler.h@0:6dee052a3fa4, 2011-07-26 (annotated)
- Committer:
- nandgate
- Date:
- Tue Jul 26 05:30:53 2011 +0000
- Revision:
- 0:6dee052a3fa4
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
nandgate | 0:6dee052a3fa4 | 1 | #ifndef HTTP_WEB_SOCKET_HANDLER_H |
nandgate | 0:6dee052a3fa4 | 2 | #define HTTP_WEB_SOCKET_HANDLER_H |
nandgate | 0:6dee052a3fa4 | 3 | |
nandgate | 0:6dee052a3fa4 | 4 | #include "mbed.h" |
nandgate | 0:6dee052a3fa4 | 5 | #include "HTTPServer.h" |
nandgate | 0:6dee052a3fa4 | 6 | #include "TemperatureSensor.h" |
nandgate | 0:6dee052a3fa4 | 7 | #include "RGBLed.h" |
nandgate | 0:6dee052a3fa4 | 8 | |
nandgate | 0:6dee052a3fa4 | 9 | // Abstrct base class for state delegation |
nandgate | 0:6dee052a3fa4 | 10 | class HTTPWebSocketState : public HTTPData { |
nandgate | 0:6dee052a3fa4 | 11 | public: |
nandgate | 0:6dee052a3fa4 | 12 | virtual HTTPStatus init(HTTPConnection *conn) = 0; |
nandgate | 0:6dee052a3fa4 | 13 | virtual HTTPHandle data(HTTPConnection *conn, void *data, int len) = 0; |
nandgate | 0:6dee052a3fa4 | 14 | virtual HTTPHandle send(HTTPConnection *conn, int maxData) = 0; |
nandgate | 0:6dee052a3fa4 | 15 | }; |
nandgate | 0:6dee052a3fa4 | 16 | |
nandgate | 0:6dee052a3fa4 | 17 | // State class for connecting the WebSocket, performing security handshake |
nandgate | 0:6dee052a3fa4 | 18 | class HTTPWebSocketConnectingState : public HTTPWebSocketState { |
nandgate | 0:6dee052a3fa4 | 19 | public: |
nandgate | 0:6dee052a3fa4 | 20 | HTTPWebSocketConnectingState(); |
nandgate | 0:6dee052a3fa4 | 21 | virtual HTTPStatus init(HTTPConnection *conn); |
nandgate | 0:6dee052a3fa4 | 22 | virtual HTTPHandle data(HTTPConnection *conn, void *data, int len); |
nandgate | 0:6dee052a3fa4 | 23 | virtual HTTPHandle send(HTTPConnection *conn, int maxData); |
nandgate | 0:6dee052a3fa4 | 24 | private: |
nandgate | 0:6dee052a3fa4 | 25 | // Helper functions |
nandgate | 0:6dee052a3fa4 | 26 | uint32_t extractNumber(const char *keyValue); |
nandgate | 0:6dee052a3fa4 | 27 | uint32_t countSpaces(const char *keyValue); |
nandgate | 0:6dee052a3fa4 | 28 | uint32_t computeKeyPart(const char *keyValue); |
nandgate | 0:6dee052a3fa4 | 29 | void hexStringToBinary(const char *hex, char *binary); |
nandgate | 0:6dee052a3fa4 | 30 | |
nandgate | 0:6dee052a3fa4 | 31 | uint8_t challange[16]; |
nandgate | 0:6dee052a3fa4 | 32 | }; |
nandgate | 0:6dee052a3fa4 | 33 | |
nandgate | 0:6dee052a3fa4 | 34 | // State class for streaming the WebSocket |
nandgate | 0:6dee052a3fa4 | 35 | class HTTPWebSocketStreamingState : public HTTPWebSocketState { |
nandgate | 0:6dee052a3fa4 | 36 | public: |
nandgate | 0:6dee052a3fa4 | 37 | HTTPWebSocketStreamingState(); |
nandgate | 0:6dee052a3fa4 | 38 | virtual HTTPStatus init(HTTPConnection *conn); |
nandgate | 0:6dee052a3fa4 | 39 | virtual HTTPHandle data(HTTPConnection *conn, void *data, int len); |
nandgate | 0:6dee052a3fa4 | 40 | virtual HTTPHandle send(HTTPConnection *conn, int maxData); |
nandgate | 0:6dee052a3fa4 | 41 | private: |
nandgate | 0:6dee052a3fa4 | 42 | DigitalOut led; |
nandgate | 0:6dee052a3fa4 | 43 | int sendCnt; |
nandgate | 0:6dee052a3fa4 | 44 | }; |
nandgate | 0:6dee052a3fa4 | 45 | |
nandgate | 0:6dee052a3fa4 | 46 | // HTTP handler for resorces that become WebSockets |
nandgate | 0:6dee052a3fa4 | 47 | class HTTPWebSocketHandler : public HTTPHandler { |
nandgate | 0:6dee052a3fa4 | 48 | public: |
nandgate | 0:6dee052a3fa4 | 49 | HTTPWebSocketHandler(const char *path) : HTTPHandler(path) { |
nandgate | 0:6dee052a3fa4 | 50 | printf("HTTPWebSocketHandler: %s\n", path); |
nandgate | 0:6dee052a3fa4 | 51 | } |
nandgate | 0:6dee052a3fa4 | 52 | |
nandgate | 0:6dee052a3fa4 | 53 | protected: |
nandgate | 0:6dee052a3fa4 | 54 | virtual void reg(HTTPServer *); |
nandgate | 0:6dee052a3fa4 | 55 | virtual HTTPStatus init(HTTPConnection *conn) const; |
nandgate | 0:6dee052a3fa4 | 56 | virtual HTTPHandle data(HTTPConnection *conn, void *data, int len) const; |
nandgate | 0:6dee052a3fa4 | 57 | virtual HTTPHandle send(HTTPConnection *, int) const; |
nandgate | 0:6dee052a3fa4 | 58 | }; |
nandgate | 0:6dee052a3fa4 | 59 | |
nandgate | 0:6dee052a3fa4 | 60 | #endif |