From bdee8b97446fabac85239ee3a4e6e8afbcc864ed Mon Sep 17 00:00:00 2001 From: Markus Date: Thu, 21 Jun 2018 09:30:11 +0200 Subject: [PATCH 01/10] call end for ESP8266_ASYNC TCP Server --- src/WebSocketsServer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/WebSocketsServer.cpp b/src/WebSocketsServer.cpp index 4ff0c0f..4bd8536 100644 --- a/src/WebSocketsServer.cpp +++ b/src/WebSocketsServer.cpp @@ -115,7 +115,7 @@ void WebSocketsServer::close(void) { #if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) _server->close(); -#elif (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32) +#elif (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266_ASYNC) _server->end(); #else // TODO how to close server? From f7a7ab6ab4364942aea4a23a26d2798f56f147d3 Mon Sep 17 00:00:00 2001 From: Markus Date: Wed, 4 Jul 2018 16:29:28 +0200 Subject: [PATCH 02/10] wrap reasonCode in define see #343 --- src/WebSockets.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/WebSockets.cpp b/src/WebSockets.cpp index 86ba98f..60baf2f 100644 --- a/src/WebSockets.cpp +++ b/src/WebSockets.cpp @@ -440,11 +440,12 @@ void WebSockets::handleWebsocketPayloadCb(WSclient_t * client, bool ok, uint8_t DEBUG_WEBSOCKETS("[WS][%d][handleWebsocket] get pong (%s)\n", client->num, payload ? (const char*)payload : ""); break; case WSop_close: { - uint16_t reasonCode = 1000; - if(header->payloadLen >= 2) { - reasonCode = payload[0] << 8 | payload[1]; - } - + #ifndef NODEBUG_WEBSOCKETS + uint16_t reasonCode = 1000; + if(header->payloadLen >= 2) { + reasonCode = payload[0] << 8 | payload[1]; + } + #endif DEBUG_WEBSOCKETS("[WS][%d][handleWebsocket] get ask for close. Code: %d", client->num, reasonCode); if(header->payloadLen > 2) { DEBUG_WEBSOCKETS(" (%s)\n", (payload + 2)); From 38c401b8afc0721d4c178193105830d354371b06 Mon Sep 17 00:00:00 2001 From: Links Date: Tue, 7 Aug 2018 18:06:32 +0200 Subject: [PATCH 03/10] adapt to ESP32 repo changes https://github.com/espressif/arduino-esp32/commit/4e5cbdaa7f4ae6d4f76a378e010d8979da9532bf --- examples/esp32/WebSocketClient/WebSocketClient.ino | 2 -- examples/esp32/WebSocketClientSSL/WebSocketClientSSL.ino | 2 -- examples/esp32/WebSocketServer/WebSocketServer.ino | 2 -- 3 files changed, 6 deletions(-) diff --git a/examples/esp32/WebSocketClient/WebSocketClient.ino b/examples/esp32/WebSocketClient/WebSocketClient.ino index 7483b6b..ae3b1d0 100644 --- a/examples/esp32/WebSocketClient/WebSocketClient.ino +++ b/examples/esp32/WebSocketClient/WebSocketClient.ino @@ -17,8 +17,6 @@ WiFiMulti WiFiMulti; WebSocketsClient webSocket; -HardwareSerial Serial1(2); - #define USE_SERIAL Serial1 void hexdump(const void *mem, uint32_t len, uint8_t cols = 16) { diff --git a/examples/esp32/WebSocketClientSSL/WebSocketClientSSL.ino b/examples/esp32/WebSocketClientSSL/WebSocketClientSSL.ino index 5b4f3a5..8761d19 100644 --- a/examples/esp32/WebSocketClientSSL/WebSocketClientSSL.ino +++ b/examples/esp32/WebSocketClientSSL/WebSocketClientSSL.ino @@ -19,8 +19,6 @@ WiFiMulti WiFiMulti; WebSocketsClient webSocket; -HardwareSerial Serial1(2); - #define USE_SERIAL Serial1 void hexdump(const void *mem, uint32_t len, uint8_t cols = 16) { diff --git a/examples/esp32/WebSocketServer/WebSocketServer.ino b/examples/esp32/WebSocketServer/WebSocketServer.ino index da7d38f..2174ebe 100644 --- a/examples/esp32/WebSocketServer/WebSocketServer.ino +++ b/examples/esp32/WebSocketServer/WebSocketServer.ino @@ -16,8 +16,6 @@ WiFiMulti WiFiMulti; WebSocketsServer webSocket = WebSocketsServer(81); -HardwareSerial Serial1(2); - #define USE_SERIAL Serial1 void hexdump(const void *mem, uint32_t len, uint8_t cols = 16) { From 388683d4cd5cfff2e740bb45ba027b8ff96d792f Mon Sep 17 00:00:00 2001 From: Links Date: Tue, 7 Aug 2018 18:10:48 +0200 Subject: [PATCH 04/10] fix compiler warnings for ESP32 - #319 --- examples/esp32/WebSocketClient/WebSocketClient.ino | 6 ++++++ examples/esp32/WebSocketClientSSL/WebSocketClientSSL.ino | 6 ++++++ examples/esp32/WebSocketServer/WebSocketServer.ino | 6 ++++++ 3 files changed, 18 insertions(+) diff --git a/examples/esp32/WebSocketClient/WebSocketClient.ino b/examples/esp32/WebSocketClient/WebSocketClient.ino index ae3b1d0..00c70e1 100644 --- a/examples/esp32/WebSocketClient/WebSocketClient.ino +++ b/examples/esp32/WebSocketClient/WebSocketClient.ino @@ -57,6 +57,12 @@ void webSocketEvent(WStype_t type, uint8_t * payload, size_t length) { // send data to server // webSocket.sendBIN(payload, length); break; + case WStype_ERROR: + case WStype_FRAGMENT_TEXT_START: + case WStype_FRAGMENT_BIN_START: + case WStype_FRAGMENT: + case WStype_FRAGMENT_FIN: + break; } } diff --git a/examples/esp32/WebSocketClientSSL/WebSocketClientSSL.ino b/examples/esp32/WebSocketClientSSL/WebSocketClientSSL.ino index 8761d19..7d59f63 100644 --- a/examples/esp32/WebSocketClientSSL/WebSocketClientSSL.ino +++ b/examples/esp32/WebSocketClientSSL/WebSocketClientSSL.ino @@ -62,6 +62,12 @@ void webSocketEvent(WStype_t type, uint8_t * payload, size_t length) { // send data to server // webSocket.sendBIN(payload, length); break; + case WStype_ERROR: + case WStype_FRAGMENT_TEXT_START: + case WStype_FRAGMENT_BIN_START: + case WStype_FRAGMENT: + case WStype_FRAGMENT_FIN: + break; } } diff --git a/examples/esp32/WebSocketServer/WebSocketServer.ino b/examples/esp32/WebSocketServer/WebSocketServer.ino index 2174ebe..87866ed 100644 --- a/examples/esp32/WebSocketServer/WebSocketServer.ino +++ b/examples/esp32/WebSocketServer/WebSocketServer.ino @@ -62,6 +62,12 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t length // send message to client // webSocket.sendBIN(num, payload, length); break; + case WStype_ERROR: + case WStype_FRAGMENT_TEXT_START: + case WStype_FRAGMENT_BIN_START: + case WStype_FRAGMENT: + case WStype_FRAGMENT_FIN: + break; } } From 32dd01b91bbae7f10b0b77ac200e69ea064ed44f Mon Sep 17 00:00:00 2001 From: Links Date: Wed, 8 Aug 2018 18:11:18 +0200 Subject: [PATCH 05/10] bump version to 2.1.1 --- library.json | 2 +- library.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/library.json b/library.json index 0dbd62d..36461eb 100644 --- a/library.json +++ b/library.json @@ -13,7 +13,7 @@ "type": "git", "url": "https://github.com/Links2004/arduinoWebSockets.git" }, - "version": "2.1.0", + "version": "2.1.1", "license": "LGPL-2.1", "export": { "exclude": [ diff --git a/library.properties b/library.properties index 14e1fe9..31c2334 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=WebSockets -version=2.1.0 +version=2.1.1 author=Markus Sattler maintainer=Markus Sattler sentence=WebSockets for Arduino (Server + Client) From 38a881a86a35c2cbf755f9c8da33178b70bd4f82 Mon Sep 17 00:00:00 2001 From: Links Date: Wed, 8 Aug 2018 18:12:02 +0200 Subject: [PATCH 06/10] bump version to 2.1.2 --- library.json | 2 +- library.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/library.json b/library.json index 36461eb..f1a5892 100644 --- a/library.json +++ b/library.json @@ -13,7 +13,7 @@ "type": "git", "url": "https://github.com/Links2004/arduinoWebSockets.git" }, - "version": "2.1.1", + "version": "2.1.2", "license": "LGPL-2.1", "export": { "exclude": [ diff --git a/library.properties b/library.properties index 31c2334..00d0945 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=WebSockets -version=2.1.1 +version=2.1.2 author=Markus Sattler maintainer=Markus Sattler sentence=WebSockets for Arduino (Server + Client) From a70d644f5d69837228a8f6c3067cf4689487d6a2 Mon Sep 17 00:00:00 2001 From: Links Date: Sun, 23 Sep 2018 11:56:33 +0200 Subject: [PATCH 07/10] adapt travis config to match esp8266 changes --- .travis.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 14693dd..d887f0b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,11 +4,13 @@ os: - linux env: matrix: - - CPU="esp8266" BOARD="esp8266com:esp8266:generic:CpuFrequency=80" IDE_VERSION=1.6.5 - - CPU="esp8266" BOARD="esp8266com:esp8266:generic:CpuFrequency=80,FlashSize=1M0,FlashMode=qio,FlashFreq=80" IDE_VERSION=1.8.5 - - CPU="esp8266" BOARD="esp8266com:esp8266:generic:CpuFrequency=80,Debug=Serial1" IDE_VERSION=1.6.5 + - CPU="esp8266" BOARD="esp8266com:esp8266:generic:xtal=80" IDE_VERSION=1.6.5 + - CPU="esp8266" BOARD="esp8266com:esp8266:generic:xtal=80,eesz=1M0,FlashMode=qio,FlashFreq=80" IDE_VERSION=1.8.5 + - CPU="esp8266" BOARD="esp8266com:esp8266:generic:xtal=80,eesz=1M0,FlashMode=qio,FlashFreq=80" IDE_VERSION=1.8.7 + - CPU="esp8266" BOARD="esp8266com:esp8266:generic:xtal=80,Debug=Serial1" IDE_VERSION=1.6.5 - CPU="esp32" BOARD="espressif:esp32:esp32:FlashFreq=80" IDE_VERSION=1.6.5 - CPU="esp32" BOARD="espressif:esp32:esp32:FlashFreq=80" IDE_VERSION=1.8.5 + - CPU="esp32" BOARD="espressif:esp32:esp32:FlashFreq=80" IDE_VERSION=1.8.7 script: - /sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_1.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :1 -ac -screen 0 1280x1024x16 From e8249f76e6c0b4a377056dd259785a50902e52fe Mon Sep 17 00:00:00 2001 From: Links Date: Sun, 23 Sep 2018 12:02:06 +0200 Subject: [PATCH 08/10] travis config second fix --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index d887f0b..a10b098 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,8 +5,8 @@ os: env: matrix: - CPU="esp8266" BOARD="esp8266com:esp8266:generic:xtal=80" IDE_VERSION=1.6.5 - - CPU="esp8266" BOARD="esp8266com:esp8266:generic:xtal=80,eesz=1M0,FlashMode=qio,FlashFreq=80" IDE_VERSION=1.8.5 - - CPU="esp8266" BOARD="esp8266com:esp8266:generic:xtal=80,eesz=1M0,FlashMode=qio,FlashFreq=80" IDE_VERSION=1.8.7 + - CPU="esp8266" BOARD="esp8266com:esp8266:generic:xtal=80,eesz=1M,FlashMode=qio,FlashFreq=80" IDE_VERSION=1.8.5 + - CPU="esp8266" BOARD="esp8266com:esp8266:generic:xtal=80,eesz=1M,FlashMode=qio,FlashFreq=80" IDE_VERSION=1.8.7 - CPU="esp8266" BOARD="esp8266com:esp8266:generic:xtal=80,Debug=Serial1" IDE_VERSION=1.6.5 - CPU="esp32" BOARD="espressif:esp32:esp32:FlashFreq=80" IDE_VERSION=1.6.5 - CPU="esp32" BOARD="espressif:esp32:esp32:FlashFreq=80" IDE_VERSION=1.8.5 From 50e2e366cc54a8bcdcb5ee3fa7e8f3f5f41a867a Mon Sep 17 00:00:00 2001 From: Links Date: Sun, 23 Sep 2018 12:07:42 +0200 Subject: [PATCH 09/10] fix travis debug test build --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index a10b098..3493a8c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,7 @@ env: - CPU="esp8266" BOARD="esp8266com:esp8266:generic:xtal=80" IDE_VERSION=1.6.5 - CPU="esp8266" BOARD="esp8266com:esp8266:generic:xtal=80,eesz=1M,FlashMode=qio,FlashFreq=80" IDE_VERSION=1.8.5 - CPU="esp8266" BOARD="esp8266com:esp8266:generic:xtal=80,eesz=1M,FlashMode=qio,FlashFreq=80" IDE_VERSION=1.8.7 - - CPU="esp8266" BOARD="esp8266com:esp8266:generic:xtal=80,Debug=Serial1" IDE_VERSION=1.6.5 + - CPU="esp8266" BOARD="esp8266com:esp8266:generic:xtal=80,dbg=Serial1" IDE_VERSION=1.6.5 - CPU="esp32" BOARD="espressif:esp32:esp32:FlashFreq=80" IDE_VERSION=1.6.5 - CPU="esp32" BOARD="espressif:esp32:esp32:FlashFreq=80" IDE_VERSION=1.8.5 - CPU="esp32" BOARD="espressif:esp32:esp32:FlashFreq=80" IDE_VERSION=1.8.7 From 4db22fe5e416d65e0524b66160ce73030263e863 Mon Sep 17 00:00:00 2001 From: Sanket Patel Date: Fri, 21 Sep 2018 23:58:48 +0530 Subject: [PATCH 10/10] make masking RFC complaint and fix #208 --- src/WebSockets.cpp | 13 ++++++------- src/WebSockets.h | 3 ++- src/WebSocketsClient.cpp | 7 ++++--- src/WebSocketsServer.cpp | 8 ++++---- 4 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/WebSockets.cpp b/src/WebSockets.cpp index 60baf2f..5e32a93 100644 --- a/src/WebSockets.cpp +++ b/src/WebSockets.cpp @@ -77,12 +77,11 @@ void WebSockets::clientDisconnect(WSclient_t * client, uint16_t code, char * rea * @param opcode WSopcode_t * @param payload uint8_t * ptr to the payload * @param length size_t length of the payload - * @param mask bool add dummy mask to the frame (needed for web browser) * @param fin bool can be used to send data in more then one frame (set fin on the last frame) * @param headerToPayload bool set true if the payload has reserved 14 Byte at the beginning to dynamically add the Header (payload neet to be in RAM!) * @return true if ok */ -bool WebSockets::sendFrame(WSclient_t * client, WSopcode_t opcode, uint8_t * payload, size_t length, bool mask, bool fin, bool headerToPayload) { +bool WebSockets::sendFrame(WSclient_t * client, WSopcode_t opcode, uint8_t * payload, size_t length, bool fin, bool headerToPayload) { if(client->tcp && !client->tcp->connected()) { DEBUG_WEBSOCKETS("[WS][%d][sendFrame] not Connected!?\n", client->num); @@ -95,7 +94,7 @@ bool WebSockets::sendFrame(WSclient_t * client, WSopcode_t opcode, uint8_t * pay } DEBUG_WEBSOCKETS("[WS][%d][sendFrame] ------- send message frame -------\n", client->num); - DEBUG_WEBSOCKETS("[WS][%d][sendFrame] fin: %u opCode: %u mask: %u length: %u headerToPayload: %u\n", client->num, fin, opcode, mask, length, headerToPayload); + DEBUG_WEBSOCKETS("[WS][%d][sendFrame] fin: %u opCode: %u mask: %u length: %u headerToPayload: %u\n", client->num, fin, opcode, client->cIsClient, length, headerToPayload); if(opcode == WSop_text) { DEBUG_WEBSOCKETS("[WS][%d][sendFrame] text: %s\n", client->num, (payload + (headerToPayload ? 14 : 0))); @@ -119,7 +118,7 @@ bool WebSockets::sendFrame(WSclient_t * client, WSopcode_t opcode, uint8_t * pay headerSize = 10; } - if(mask) { + if(client->cIsClient) { headerSize += 4; } @@ -158,7 +157,7 @@ bool WebSockets::sendFrame(WSclient_t * client, WSopcode_t opcode, uint8_t * pay // byte 1 *headerPtr = 0x00; - if(mask) { + if(client->cIsClient) { *headerPtr |= bit(7); ///< set mask } @@ -194,7 +193,7 @@ bool WebSockets::sendFrame(WSclient_t * client, WSopcode_t opcode, uint8_t * pay headerPtr++; } - if(mask) { + if(client->cIsClient) { if(useInternBuffer) { // if we use a Intern Buffer we can modify the data // by this fact its possible the do the masking @@ -434,7 +433,7 @@ void WebSockets::handleWebsocketPayloadCb(WSclient_t * client, bool ok, uint8_t break; case WSop_ping: // send pong back - sendFrame(client, WSop_pong, payload, header->payloadLen, true); + sendFrame(client, WSop_pong, payload, header->payloadLen); break; case WSop_pong: DEBUG_WEBSOCKETS("[WS][%d][handleWebsocket] get pong (%s)\n", client->num, payload ? (const char*)payload : ""); diff --git a/src/WebSockets.h b/src/WebSockets.h index 4063b5f..da88f08 100644 --- a/src/WebSockets.h +++ b/src/WebSockets.h @@ -241,6 +241,7 @@ typedef struct { String cUrl; ///< http url uint16_t cCode; ///< http code + bool cIsClient = false; ///< will be used for masking bool cIsUpgrade; ///< Connection == Upgrade bool cIsWebsocket; ///< Upgrade == websocket @@ -285,7 +286,7 @@ class WebSockets { virtual void messageReceived(WSclient_t * client, WSopcode_t opcode, uint8_t * payload, size_t length, bool fin) = 0; void clientDisconnect(WSclient_t * client, uint16_t code, char * reason = NULL, size_t reasonLen = 0); - bool sendFrame(WSclient_t * client, WSopcode_t opcode, uint8_t * payload = NULL, size_t length = 0, bool mask = false, bool fin = true, bool headerToPayload = false); + bool sendFrame(WSclient_t * client, WSopcode_t opcode, uint8_t * payload = NULL, size_t length = 0, bool fin = true, bool headerToPayload = false); void headerDone(WSclient_t * client); diff --git a/src/WebSocketsClient.cpp b/src/WebSocketsClient.cpp index b211df2..94ca434 100644 --- a/src/WebSocketsClient.cpp +++ b/src/WebSocketsClient.cpp @@ -28,6 +28,7 @@ WebSocketsClient::WebSocketsClient() { _cbEvent = NULL; _client.num = 0; + _client.cIsClient = true; _client.extraHeaders = WEBSOCKETS_STRING("Origin: file://"); } @@ -194,7 +195,7 @@ bool WebSocketsClient::sendTXT(uint8_t * payload, size_t length, bool headerToPa length = strlen((const char *) payload); } if(clientIsConnected(&_client)) { - return sendFrame(&_client, WSop_text, payload, length, true, true, headerToPayload); + return sendFrame(&_client, WSop_text, payload, length, true, headerToPayload); } return false; } @@ -225,7 +226,7 @@ bool WebSocketsClient::sendTXT(String & payload) { */ bool WebSocketsClient::sendBIN(uint8_t * payload, size_t length, bool headerToPayload) { if(clientIsConnected(&_client)) { - return sendFrame(&_client, WSop_binary, payload, length, true, true, headerToPayload); + return sendFrame(&_client, WSop_binary, payload, length, true, headerToPayload); } return false; } @@ -242,7 +243,7 @@ bool WebSocketsClient::sendBIN(const uint8_t * payload, size_t length) { */ bool WebSocketsClient::sendPing(uint8_t * payload, size_t length) { if(clientIsConnected(&_client)) { - return sendFrame(&_client, WSop_ping, payload, length, true); + return sendFrame(&_client, WSop_ping, payload, length); } return false; } diff --git a/src/WebSocketsServer.cpp b/src/WebSocketsServer.cpp index 4bd8536..e1752f2 100644 --- a/src/WebSocketsServer.cpp +++ b/src/WebSocketsServer.cpp @@ -184,7 +184,7 @@ bool WebSocketsServer::sendTXT(uint8_t num, uint8_t * payload, size_t length, bo } WSclient_t * client = &_clients[num]; if(clientIsConnected(client)) { - return sendFrame(client, WSop_text, payload, length, false, true, headerToPayload); + return sendFrame(client, WSop_text, payload, length, true, headerToPayload); } return false; } @@ -222,7 +222,7 @@ bool WebSocketsServer::broadcastTXT(uint8_t * payload, size_t length, bool heade for(uint8_t i = 0; i < WEBSOCKETS_SERVER_CLIENT_MAX; i++) { client = &_clients[i]; if(clientIsConnected(client)) { - if(!sendFrame(client, WSop_text, payload, length, false, true, headerToPayload)) { + if(!sendFrame(client, WSop_text, payload, length, true, headerToPayload)) { ret = false; } } @@ -263,7 +263,7 @@ bool WebSocketsServer::sendBIN(uint8_t num, uint8_t * payload, size_t length, bo } WSclient_t * client = &_clients[num]; if(clientIsConnected(client)) { - return sendFrame(client, WSop_binary, payload, length, false, true, headerToPayload); + return sendFrame(client, WSop_binary, payload, length, true, headerToPayload); } return false; } @@ -285,7 +285,7 @@ bool WebSocketsServer::broadcastBIN(uint8_t * payload, size_t length, bool heade for(uint8_t i = 0; i < WEBSOCKETS_SERVER_CLIENT_MAX; i++) { client = &_clients[i]; if(clientIsConnected(client)) { - if(!sendFrame(client, WSop_binary, payload, length, false, true, headerToPayload)) { + if(!sendFrame(client, WSop_binary, payload, length, true, headerToPayload)) { ret = false; } }