Embedded WebSockets Experiment

Dependencies:   mbed MD5

Committer:
nandgate
Date:
Tue Jul 26 05:30:53 2011 +0000
Revision:
0:6dee052a3fa4

        

Who changed what in which revision?

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