John Lowe
/
WebSockets2
Embedded WebSockets Experiment
Diff: HTTPWebSocketHandler.h
- Revision:
- 0:6dee052a3fa4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/HTTPWebSocketHandler.h Tue Jul 26 05:30:53 2011 +0000 @@ -0,0 +1,60 @@ +#ifndef HTTP_WEB_SOCKET_HANDLER_H +#define HTTP_WEB_SOCKET_HANDLER_H + +#include "mbed.h" +#include "HTTPServer.h" +#include "TemperatureSensor.h" +#include "RGBLed.h" + +// Abstrct base class for state delegation +class HTTPWebSocketState : public HTTPData { +public: + virtual HTTPStatus init(HTTPConnection *conn) = 0; + virtual HTTPHandle data(HTTPConnection *conn, void *data, int len) = 0; + virtual HTTPHandle send(HTTPConnection *conn, int maxData) = 0; +}; + +// State class for connecting the WebSocket, performing security handshake +class HTTPWebSocketConnectingState : public HTTPWebSocketState { +public: + HTTPWebSocketConnectingState(); + virtual HTTPStatus init(HTTPConnection *conn); + virtual HTTPHandle data(HTTPConnection *conn, void *data, int len); + virtual HTTPHandle send(HTTPConnection *conn, int maxData); +private: + // Helper functions + uint32_t extractNumber(const char *keyValue); + uint32_t countSpaces(const char *keyValue); + uint32_t computeKeyPart(const char *keyValue); + void hexStringToBinary(const char *hex, char *binary); + + uint8_t challange[16]; +}; + +// State class for streaming the WebSocket +class HTTPWebSocketStreamingState : public HTTPWebSocketState { +public: + HTTPWebSocketStreamingState(); + virtual HTTPStatus init(HTTPConnection *conn); + virtual HTTPHandle data(HTTPConnection *conn, void *data, int len); + virtual HTTPHandle send(HTTPConnection *conn, int maxData); +private: + DigitalOut led; + int sendCnt; +}; + +// HTTP handler for resorces that become WebSockets +class HTTPWebSocketHandler : public HTTPHandler { +public: + HTTPWebSocketHandler(const char *path) : HTTPHandler(path) { + printf("HTTPWebSocketHandler: %s\n", path); + } + +protected: + virtual void reg(HTTPServer *); + virtual HTTPStatus init(HTTPConnection *conn) const; + virtual HTTPHandle data(HTTPConnection *conn, void *data, int len) const; + virtual HTTPHandle send(HTTPConnection *, int) const; +}; + +#endif