Skip to content

Commit d325bd3

Browse files
committed
Merge branch 'master' into gpn18
2 parents 50903cd + eaef4f0 commit d325bd3

File tree

10 files changed

+70
-55
lines changed

10 files changed

+70
-55
lines changed

.travis.yml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@ os:
44
- linux
55
env:
66
matrix:
7-
- CPU="esp8266" BOARD="esp8266com:esp8266:generic:CpuFrequency=80" IDE_VERSION=1.6.5
8-
- CPU="esp8266" BOARD="esp8266com:esp8266:generic:CpuFrequency=80,FlashSize=1M0,FlashMode=qio,FlashFreq=80" IDE_VERSION=1.8.5
9-
- CPU="esp8266" BOARD="esp8266com:esp8266:generic:CpuFrequency=80,Debug=Serial1" IDE_VERSION=1.6.5
7+
- CPU="esp8266" BOARD="esp8266com:esp8266:generic:xtal=80" IDE_VERSION=1.6.5
8+
- CPU="esp8266" BOARD="esp8266com:esp8266:generic:xtal=80,eesz=1M,FlashMode=qio,FlashFreq=80" IDE_VERSION=1.8.5
9+
- CPU="esp8266" BOARD="esp8266com:esp8266:generic:xtal=80,eesz=1M,FlashMode=qio,FlashFreq=80" IDE_VERSION=1.8.7
10+
- CPU="esp8266" BOARD="esp8266com:esp8266:generic:xtal=80,dbg=Serial1" IDE_VERSION=1.6.5
1011
- CPU="esp32" BOARD="espressif:esp32:esp32:FlashFreq=80" IDE_VERSION=1.6.5
1112
- CPU="esp32" BOARD="espressif:esp32:esp32:FlashFreq=80" IDE_VERSION=1.8.5
13+
- CPU="esp32" BOARD="espressif:esp32:esp32:FlashFreq=80" IDE_VERSION=1.8.7
1214

1315
script:
1416
- /sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_1.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :1 -ac -screen 0 1280x1024x16

examples/esp32/WebSocketClient/WebSocketClient.ino

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@
1717
WiFiMulti WiFiMulti;
1818
WebSocketsClient webSocket;
1919

20-
HardwareSerial Serial1(2);
21-
2220
#define USE_SERIAL Serial1
2321

2422
void hexdump(const void *mem, uint32_t len, uint8_t cols = 16) {
@@ -59,6 +57,12 @@ void webSocketEvent(WStype_t type, uint8_t * payload, size_t length) {
5957
// send data to server
6058
// webSocket.sendBIN(payload, length);
6159
break;
60+
case WStype_ERROR:
61+
case WStype_FRAGMENT_TEXT_START:
62+
case WStype_FRAGMENT_BIN_START:
63+
case WStype_FRAGMENT:
64+
case WStype_FRAGMENT_FIN:
65+
break;
6266
}
6367

6468
}

examples/esp32/WebSocketClientSSL/WebSocketClientSSL.ino

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@
1919
WiFiMulti WiFiMulti;
2020
WebSocketsClient webSocket;
2121

22-
HardwareSerial Serial1(2);
23-
2422
#define USE_SERIAL Serial1
2523

2624
void hexdump(const void *mem, uint32_t len, uint8_t cols = 16) {
@@ -64,6 +62,12 @@ void webSocketEvent(WStype_t type, uint8_t * payload, size_t length) {
6462
// send data to server
6563
// webSocket.sendBIN(payload, length);
6664
break;
65+
case WStype_ERROR:
66+
case WStype_FRAGMENT_TEXT_START:
67+
case WStype_FRAGMENT_BIN_START:
68+
case WStype_FRAGMENT:
69+
case WStype_FRAGMENT_FIN:
70+
break;
6771
}
6872

6973
}

examples/esp32/WebSocketServer/WebSocketServer.ino

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@
1616
WiFiMulti WiFiMulti;
1717
WebSocketsServer webSocket = WebSocketsServer(81);
1818

19-
HardwareSerial Serial1(2);
20-
2119
#define USE_SERIAL Serial1
2220

2321
void hexdump(const void *mem, uint32_t len, uint8_t cols = 16) {
@@ -64,6 +62,12 @@ void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t length
6462
// send message to client
6563
// webSocket.sendBIN(num, payload, length);
6664
break;
65+
case WStype_ERROR:
66+
case WStype_FRAGMENT_TEXT_START:
67+
case WStype_FRAGMENT_BIN_START:
68+
case WStype_FRAGMENT:
69+
case WStype_FRAGMENT_FIN:
70+
break;
6771
}
6872

6973
}

library.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"type": "git",
1414
"url": "https://github.com/Links2004/arduinoWebSockets.git"
1515
},
16-
"version": "2.1.0",
16+
"version": "2.1.2",
1717
"license": "LGPL-2.1",
1818
"export": {
1919
"exclude": [

library.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name=WebSockets
2-
version=2.1.0
2+
version=2.1.2
33
author=Markus Sattler
44
maintainer=Markus Sattler
55
sentence=WebSockets for Arduino (Server + Client)

src/WebSockets.cpp

Lines changed: 29 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -161,15 +161,14 @@ uint8_t WebSockets::createHeader(uint8_t * headerPtr, WSopcode_t opcode, size_t
161161
* @param client WSclient_t * ptr to the client struct
162162
* @param opcode WSopcode_t
163163
* @param length size_t length of the payload
164-
* @param mask bool add dummy mask to the frame (needed for web browser)
165164
* @param fin bool can be used to send data in more then one frame (set fin on the last frame)
166165
* @return true if ok
167166
*/
168-
bool WebSockets::sendFrameHeader(WSclient_t * client, WSopcode_t opcode, size_t length, bool mask, bool fin) {
167+
bool WebSockets::sendFrameHeader(WSclient_t * client, WSopcode_t opcode, size_t length, bool fin) {
169168
uint8_t maskKey[4] = { 0x00, 0x00, 0x00, 0x00 };
170169
uint8_t buffer[WEBSOCKETS_MAX_HEADER_SIZE] = { 0 };
171170

172-
uint8_t headerSize = createHeader(&buffer[0], opcode, length, mask, maskKey, fin);
171+
uint8_t headerSize = createHeader(&buffer[0], opcode, length, client->cIsClient, maskKey, fin);
173172

174173
if(write(client, &buffer[0], headerSize) != headerSize) {
175174
return false;
@@ -186,12 +185,11 @@ bool WebSockets::sendFrameHeader(WSclient_t * client, WSopcode_t opcode, size_t
186185
* @param opcode WSopcode_t
187186
* @param payload uint8_t * ptr to the payload
188187
* @param length size_t length of the payload
189-
* @param mask bool add dummy mask to the frame (needed for web browser)
190188
* @param fin bool can be used to send data in more then one frame (set fin on the last frame)
191189
* @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!)
192190
* @return true if ok
193191
*/
194-
bool WebSockets::sendFrame(WSclient_t * client, WSopcode_t opcode, uint8_t * payload, size_t length, bool mask, bool fin, bool headerToPayload) {
192+
bool WebSockets::sendFrame(WSclient_t * client, WSopcode_t opcode, uint8_t * payload, size_t length, bool fin, bool headerToPayload) {
195193

196194
if(client->tcp && !client->tcp->connected()) {
197195
DEBUG_WEBSOCKETS("[WS][%d][sendFrame] not Connected!?\n", client->num);
@@ -204,7 +202,7 @@ bool WebSockets::sendFrame(WSclient_t * client, WSopcode_t opcode, uint8_t * pay
204202
}
205203

206204
DEBUG_WEBSOCKETS("[WS][%d][sendFrame] ------- send message frame -------\n", client->num);
207-
DEBUG_WEBSOCKETS("[WS][%d][sendFrame] fin: %u opCode: %u mask: %u length: %u headerToPayload: %u\n", client->num, fin, opcode, mask, length, headerToPayload);
205+
DEBUG_WEBSOCKETS("[WS][%d][sendFrame] fin: %u opCode: %u mask: %u length: %u headerToPayload: %u\n", client->num, fin, opcode, client->cIsClient, length, headerToPayload);
208206

209207
if(opcode == WSop_text) {
210208
DEBUG_WEBSOCKETS("[WS][%d][sendFrame] text: %s\n", client->num, (payload + (headerToPayload ? 14 : 0)));
@@ -228,7 +226,7 @@ bool WebSockets::sendFrame(WSclient_t * client, WSopcode_t opcode, uint8_t * pay
228226
headerSize = 10;
229227
}
230228

231-
if(mask) {
229+
if(client->cIsClient) {
232230
headerSize += 4;
233231
}
234232

@@ -255,27 +253,27 @@ bool WebSockets::sendFrame(WSclient_t * client, WSopcode_t opcode, uint8_t * pay
255253
headerPtr = &buffer[0];
256254
}
257255

258-
createHeader(headerPtr, opcode, length, mask, maskKey, fin);
256+
if(client->cIsClient && useInternBuffer) {
257+
// if we use a Intern Buffer we can modify the data
258+
// by this fact its possible the do the masking
259+
for(uint8_t x = 0; x < sizeof(maskKey); x++) {
260+
maskKey[x] = random(0xFF);
261+
}
262+
}
259263

260-
if(mask) {
261-
if(useInternBuffer) {
262-
// if we use a Intern Buffer we can modify the data
263-
// by this fact its possible the do the masking
264-
for(uint8_t x = 0; x < sizeof(maskKey); x++) {
265-
maskKey[x] = random(0xFF);
266-
}
264+
createHeader(headerPtr, opcode, length, client->cIsClient, maskKey, fin);
267265

268-
uint8_t * dataMaskPtr;
266+
if(client->cIsClient && useInternBuffer) {
267+
uint8_t * dataMaskPtr;
269268

270-
if(headerToPayload) {
271-
dataMaskPtr = (payloadPtr + WEBSOCKETS_MAX_HEADER_SIZE);
272-
} else {
273-
dataMaskPtr = payloadPtr;
274-
}
269+
if(headerToPayload) {
270+
dataMaskPtr = (payloadPtr + WEBSOCKETS_MAX_HEADER_SIZE);
271+
} else {
272+
dataMaskPtr = payloadPtr;
273+
}
275274

276-
for(size_t x = 0; x < length; x++) {
277-
dataMaskPtr[x] = (dataMaskPtr[x] ^ maskKey[x % 4]);
278-
}
275+
for(size_t x = 0; x < length; x++) {
276+
dataMaskPtr[x] = (dataMaskPtr[x] ^ maskKey[x % 4]);
279277
}
280278
}
281279

@@ -485,17 +483,18 @@ void WebSockets::handleWebsocketPayloadCb(WSclient_t * client, bool ok, uint8_t
485483
break;
486484
case WSop_ping:
487485
// send pong back
488-
sendFrame(client, WSop_pong, payload, header->payloadLen, true);
486+
sendFrame(client, WSop_pong, payload, header->payloadLen);
489487
break;
490488
case WSop_pong:
491489
DEBUG_WEBSOCKETS("[WS][%d][handleWebsocket] get pong (%s)\n", client->num, payload ? (const char*)payload : "");
492490
break;
493491
case WSop_close: {
494-
uint16_t reasonCode = 1000;
495-
if(header->payloadLen >= 2) {
496-
reasonCode = payload[0] << 8 | payload[1];
497-
}
498-
492+
#ifndef NODEBUG_WEBSOCKETS
493+
uint16_t reasonCode = 1000;
494+
if(header->payloadLen >= 2) {
495+
reasonCode = payload[0] << 8 | payload[1];
496+
}
497+
#endif
499498
DEBUG_WEBSOCKETS("[WS][%d][handleWebsocket] get ask for close. Code: %d", client->num, reasonCode);
500499
if(header->payloadLen > 2) {
501500
DEBUG_WEBSOCKETS(" (%s)\n", (payload + 2));

src/WebSockets.h

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -192,10 +192,10 @@ typedef enum {
192192
WStype_CONNECTED,
193193
WStype_TEXT,
194194
WStype_BIN,
195-
WStype_FRAGMENT_TEXT_START,
196-
WStype_FRAGMENT_BIN_START,
197-
WStype_FRAGMENT,
198-
WStype_FRAGMENT_FIN,
195+
WStype_FRAGMENT_TEXT_START,
196+
WStype_FRAGMENT_BIN_START,
197+
WStype_FRAGMENT,
198+
WStype_FRAGMENT_FIN,
199199
} WStype_t;
200200

201201
typedef enum {
@@ -241,6 +241,7 @@ typedef struct {
241241
String cUrl; ///< http url
242242
uint16_t cCode; ///< http code
243243

244+
bool cIsClient = false; ///< will be used for masking
244245
bool cIsUpgrade; ///< Connection == Upgrade
245246
bool cIsWebsocket; ///< Upgrade == websocket
246247

@@ -287,8 +288,8 @@ class WebSockets {
287288
void clientDisconnect(WSclient_t * client, uint16_t code, char * reason = NULL, size_t reasonLen = 0);
288289

289290
uint8_t createHeader(uint8_t * buf, WSopcode_t opcode, size_t length, bool mask, uint8_t maskKey[4], bool fin);
290-
bool sendFrameHeader(WSclient_t * client, WSopcode_t opcode, size_t length = 0, bool mask = false, bool fin = true);
291-
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);
291+
bool sendFrameHeader(WSclient_t * client, WSopcode_t opcode, size_t length = 0, bool fin = true);
292+
bool sendFrame(WSclient_t * client, WSopcode_t opcode, uint8_t * payload = NULL, size_t length = 0, bool fin = true, bool headerToPayload = false);
292293

293294
void headerDone(WSclient_t * client);
294295

src/WebSocketsClient.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
WebSocketsClient::WebSocketsClient() {
2929
_cbEvent = NULL;
3030
_client.num = 0;
31+
_client.cIsClient = true;
3132
_client.extraHeaders = WEBSOCKETS_STRING("Origin: file://");
3233
}
3334

@@ -194,7 +195,7 @@ bool WebSocketsClient::sendTXT(uint8_t * payload, size_t length, bool headerToPa
194195
length = strlen((const char *) payload);
195196
}
196197
if(clientIsConnected(&_client)) {
197-
return sendFrame(&_client, WSop_text, payload, length, true, true, headerToPayload);
198+
return sendFrame(&_client, WSop_text, payload, length, true, headerToPayload);
198199
}
199200
return false;
200201
}
@@ -231,7 +232,7 @@ bool WebSocketsClient::sendTXT(char payload) {
231232
*/
232233
bool WebSocketsClient::sendBIN(uint8_t * payload, size_t length, bool headerToPayload) {
233234
if(clientIsConnected(&_client)) {
234-
return sendFrame(&_client, WSop_binary, payload, length, true, true, headerToPayload);
235+
return sendFrame(&_client, WSop_binary, payload, length, true, headerToPayload);
235236
}
236237
return false;
237238
}
@@ -248,7 +249,7 @@ bool WebSocketsClient::sendBIN(const uint8_t * payload, size_t length) {
248249
*/
249250
bool WebSocketsClient::sendPing(uint8_t * payload, size_t length) {
250251
if(clientIsConnected(&_client)) {
251-
return sendFrame(&_client, WSop_ping, payload, length, true);
252+
return sendFrame(&_client, WSop_ping, payload, length);
252253
}
253254
return false;
254255
}

src/WebSocketsServer.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ void WebSocketsServer::close(void) {
115115

116116
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266)
117117
_server->close();
118-
#elif (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32)
118+
#elif (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266_ASYNC)
119119
_server->end();
120120
#else
121121
// TODO how to close server?
@@ -184,7 +184,7 @@ bool WebSocketsServer::sendTXT(uint8_t num, uint8_t * payload, size_t length, bo
184184
}
185185
WSclient_t * client = &_clients[num];
186186
if(clientIsConnected(client)) {
187-
return sendFrame(client, WSop_text, payload, length, false, true, headerToPayload);
187+
return sendFrame(client, WSop_text, payload, length, true, headerToPayload);
188188
}
189189
return false;
190190
}
@@ -222,7 +222,7 @@ bool WebSocketsServer::broadcastTXT(uint8_t * payload, size_t length, bool heade
222222
for(uint8_t i = 0; i < WEBSOCKETS_SERVER_CLIENT_MAX; i++) {
223223
client = &_clients[i];
224224
if(clientIsConnected(client)) {
225-
if(!sendFrame(client, WSop_text, payload, length, false, true, headerToPayload)) {
225+
if(!sendFrame(client, WSop_text, payload, length, true, headerToPayload)) {
226226
ret = false;
227227
}
228228
}
@@ -263,7 +263,7 @@ bool WebSocketsServer::sendBIN(uint8_t num, uint8_t * payload, size_t length, bo
263263
}
264264
WSclient_t * client = &_clients[num];
265265
if(clientIsConnected(client)) {
266-
return sendFrame(client, WSop_binary, payload, length, false, true, headerToPayload);
266+
return sendFrame(client, WSop_binary, payload, length, true, headerToPayload);
267267
}
268268
return false;
269269
}
@@ -285,7 +285,7 @@ bool WebSocketsServer::broadcastBIN(uint8_t * payload, size_t length, bool heade
285285
for(uint8_t i = 0; i < WEBSOCKETS_SERVER_CLIENT_MAX; i++) {
286286
client = &_clients[i];
287287
if(clientIsConnected(client)) {
288-
if(!sendFrame(client, WSop_binary, payload, length, false, true, headerToPayload)) {
288+
if(!sendFrame(client, WSop_binary, payload, length, true, headerToPayload)) {
289289
ret = false;
290290
}
291291
}

0 commit comments

Comments
 (0)