3#include <web/websockets.h>
4#include <websockets/server.h>
7WebsocketsServer::WebsocketsServer(network::TcpServer *server) : _server(server) {}
9bool WebsocketsServer::available() {
return this->_server->available(); }
11void WebsocketsServer::listen(uint16_t port) { this->_server->listen(port); }
14bool WebsocketsServer::poll() {
return this->_server->poll(); }
18 std::map<std::string, std::string>
headers;
25 result.
head = client.readLine();
27 std::string line = client.readLine();
29 std::string key =
"", value =
"";
33 while (idx < line.size() && line[idx] !=
':') {
40 while (idx < line.size() && (line[idx] ==
' ' || line[idx] ==
'\t'))
44 while (idx < line.size() && line[idx] !=
'\r') {
52 line = client.readLine();
53 }
while (client.available() && line !=
"\r\n");
59WebsocketsClient WebsocketsServer::accept() {
60 std::shared_ptr<network::TcpClient> tcpClient(_server->accept());
61 if (tcpClient->available() ==
false)
66 if (params.headers[
"Connection"].find(
"Upgrade") == std::string::npos)
68 if (params.headers[
"Upgrade"] !=
"websocket")
70 if (params.headers[
"Sec-WebSocket-Version"] !=
"13")
72 if (params.headers[
"Sec-WebSocket-Key"] ==
"")
77 std::string serverAccept =
"fixme";
81 tcpClient->send(
"HTTP/1.1 101 Switching Protocols\r\n");
82 tcpClient->send(
"Connection: Upgrade\r\n");
83 tcpClient->send(
"Upgrade: websocket\r\n");
84 tcpClient->send(
"Sec-WebSocket-Version: 13\r\n");
85 tcpClient->send(
"Sec-WebSocket-Accept: " + serverAccept +
"\r\n");
86 tcpClient->send(
"\r\n");
88 WebsocketsClient wsClient(tcpClient);
90 wsClient.setUseMasking(
false);
94WebsocketsServer::~WebsocketsServer() { this->_server->close(); }
FLASHMEM ParsedHandshakeParams recvHandshakeRequest(network::TcpClient &client)
std::map< std::string, std::string > headers