8000 Merge branch 'master' into master · robokoding/arduinoWebSockets@60e3d10 · GitHub
[go: up one dir, main page]

Skip to content

Commit 60e3d10

Browse files
authored
Merge branch 'master' into master
2 parents 7810d0d + 26fc61f commit 60e3d10

File tree

9 files changed

+94
-11
lines changed

9 files changed

+94
-11
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ a WebSocket Server and Client for Arduino based on RFC6455.
4848

4949
This libary can run in Async TCP mode on the ESP.
5050

51-
The mode can be aktivated in the ```WebSockets.h``` (see WEBSOCKETS_NETWORK_TYPE define).
51+
The mode can be activated in the ```WebSockets.h``` (see WEBSOCKETS_NETWORK_TYPE define).
5252

5353
[ESPAsyncTCP](https://github.com/me-no-dev/ESPAsyncTCP) libary is required.
5454

examples/WebSocketClientSocketIO/WebSocketClientSocketIO.ino

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ void setup() {
8686
delay(100);
8787
}
8888

89-
webSocket.begin("192.168.0.123", 81);
89+
webSocket.beginSocketIO("192.168.0.123", 81);
9090
//webSocket.setAuthorization("user", "Password"); // HTTP Basic Authorization
9191
webSocket.onEvent(webSocketEvent);
9292

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.0.5",
16+
"version": "2.0.6",
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.0.5
2+
version=2.0.6
33
author=Markus Sattler
44
maintainer=Markus Sattler
55
sentence=WebSockets for Arduino (Server + Client)

src/WebSockets.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -430,7 +430,7 @@ void WebSockets::handleWebsocketPayloadCb(WSclient_t * client, bool ok, uint8_t
430430
break;
431431
case WSop_ping:
432432
// send pong back
433-
sendFrame(client, WSop_pong, payload, header->payloadLen);
433+
sendFrame(client, WSop_pong, payload, header->payloadLen, true);
434434
break;
435435
case WSop_pong:
436436
DEBUG_WEBSOCKETS("[WS][%d][handleWebsocket] get pong (%s)\n", client->num, payload);

src/WebSocketsClient.cpp

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ void WebSocketsClient::begin(const char *host, uint16_t port, const char * url,
6363
_client.cVersion = 0;
6464
_client.base64Authorization = "";
6565
_client.plainAuthorization = "";
66+
_client.isSocketIO = false;
6667

6768
#ifdef ESP8266
6869
randomSeed(RANDOM_REG32);
@@ -207,6 +208,24 @@ bool WebSocketsClient::sendBIN(const uint8_t * payload, size_t length) {
207208
return sendBIN((uint8_t *) payload, length);
208209
}
209210

211+
/**
212+
* sends a WS ping to Server
213+
* @param payload uint8_t *
214+
* @param length size_t
215+
* @return true if ping is send out
216+
*/
217+
bool WebSocketsClient::sendPing(uint8_t * payload, size_t length) {
218+
if(clientIsConnected(&_client)) {
219+
return sendFrame(&_client, WSop_ping, payload, length, true);
220+
}
221+
return false;
222+
}
223+
224+
bool WebSocketsClient::sendPing(String & payload) {
225+
return sendPing((uint8_t *) payload.c_str(), payload.length());
226+
}
227+
228+
210229
/**
211230
* disconnect one client
212231
* @param num uint8_t client id
@@ -313,6 +332,7 @@ void WebSocketsClient::clientDisconnect(WSclient_t * client) {
313332
client->cVersion = 0;
314333
client->cIsUpgrade = false;
315334
client->cIsWebsocket = false;
335+
client->cSessionId = "";
316336

317337
client->status = WSC_NOT_CONNECTED;
318338

@@ -411,8 +431,6 @@ void WebSocketsClient::sendHeader(WSclient_t * client) {
411431
"Host: " + _host + ":" + _port + "\r\n"
412432
"Connection: Upgrade\r\n"
413433
"Upgrade: websocket\r\n"
414-
"Origin: file://\r\n"
415-
"User-Agent: arduino-WebSocket-Client\r\n"
416434
"Sec-WebSocket-Version: 13\r\n"
417435
"Sec-WebSocket-Key: " + client->cKey + "\r\n";
418436

@@ -426,11 +444,11 @@ void WebSocketsClient::sendHeader(WSclient_t * client) {
426444

427445
} else {
428446
handshake = "GET " + client->cUrl + "&transport=polling HTTP/1.1\r\n"
447+
"Host: " + _host + ":" + _port + "\r\n"
429448
"Connection: keep-alive\r\n";
430449
}
431450

432-
handshake += "Host: " + _host + ":" + _port + "\r\n"
433-
"Origin: file://\r\n"
451+
handshake += "Origin: file://\r\n"
434452
"User-Agent: arduino-WebSocket-Client\r\n";
435453

436454
if(client->base64Authorization.length() > 0) {
@@ -443,6 +461,7 @@ void WebSocketsClient::sendHeader(WSclient_t * client) {
443461

444462
handshake += "\r\n";
445463

464+
DEBUG_WEBSOCKETS("[WS-Client][sendHeader] handshake %s", (uint8_t*)handshake.c_str());
446465
client->tcp->write((uint8_t*)handshake.c_str(), handshake.length());
447466

448467
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266_ASYNC)
@@ -489,7 +508,11 @@ void WebSocketsClient::handleHeader(WSclient_t * client, String * headerLine) {
489508
} else if(headerName.equalsIgnoreCase("Sec-WebSocket-Version")) {
490509
client->cVersion = headerValue.toInt();
491510
} else if(headerName.equalsIgnoreCase("Set-Cookie")) {
492-
client->cSessionId = headerValue.substring(headerValue.indexOf('=') + 1);
511+
if (headerValue.indexOf("HttpOnly") > -1) {
512+
client->cSessionId = headerValue.substring(headerValue.indexOf('=') + 1, headerValue.indexOf(";"));
513+
} else {
514+
client->cSessionId = headerValue.substring(headerValue.indexOf('=') + 1);
515+
}
493516
}
494517
} else {
495518
DEBUG_WEBSOCKETS("[WS-Client][handleHeader] Header error (%s)\n", headerLine->c_str());

src/WebSocketsClient.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,9 @@ class WebSocketsClient: private WebSockets {
6868
bool sendBIN(uint8_t * payload, size_t length, bool headerToPayload = false);
6969
bool sendBIN(const uint8_t * payload, size_t length);
7070

71+
bool sendPing(uint8_t * payload = NULL, size_t length = 0);
72+
bool sendPing(String & payload);
73+
7174
void disconnect(void);
7275

7376
void setAuthorization(const char * user, const char * pa 10000 ssword);

src/WebSocketsServer.cpp

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,57 @@ bool WebSocketsServer::broadcastBIN(const uint8_t * payload, size_t length) {
283283
return broadcastBIN((uint8_t *) payload, length);
284284
}
285285

286+
287+
/**
288+
* sends a WS ping to Client
289+
* @param num uint8_t client id
290+
* @param payload uint8_t *
291+
* @param length size_t
292+
* @return true if ping is send out
293+
*/
294+
bool WebSocketsServer::sendPing(uint8_t num, uint8_t * payload, size_t length) {
295+
if(num >= WEBSOCKETS_SERVER_CLIENT_MAX) {
296+
return false;
297+
}
298+
WSclient_t * client = &_clients[num];
299+
if(clientIsConnected(client)) {
300+
return sendFrame(client, WSop_ping, payload, length);
301+
}
302+
return false;
303+
}
304+
305+
bool WebSocketsServer::sendPing(uint8_t num, String & payload) {
306+
return sendPing(num, (uint8_t *) payload.c_str(), payload.length());
307+
}
308+
309+
/**
310+
* sends a WS ping to all Client
311+
* @param payload uint8_t *
312+
* @param length size_t
313+
* @return true if ping is send out
314+
*/
315+
bool WebSocketsServer::broadcastPing(uint8_t * payload, size_t length) {
316+
WSclient_t * client;
317+
bool ret = true;
318+
for(uint8_t i = 0; i < WEBSOCKETS_SERVER_CLIENT_MAX; i++) {
319+
client = &_clients[i];
320+
if(clientIsConnected(client)) {
321+
if(!sendFrame(client, WSop_ping, payload, length)) {
322+
ret = false;
323+
}
324+
}
325+
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266)
326+
delay(0);
327+
#endif
328+
}
329+
return ret;
330+
}
331+
332+
bool WebSocketsServer::broadcastPing(String & payload) {
333+
return broadcastPing((uint8_t *) payload.c_str(), payload.length());
334+
}
335+
336+
286337
/**
287338
* disconnect all clients
288339
*/

src/WebSocketsServer.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232

3333

3434

35-
class WebSocketsServer: private WebSockets {
35+
class WebSocketsServer: protected WebSockets {
3636
public:
3737

3838
#ifdef __AVR__
@@ -80,6 +80,12 @@ class WebSocketsServer: private WebSockets {
8080
bool broadcastBIN(uint8_t * payload, size_t length, bool headerToPayload = false);
8181
bool broadcastBIN(const uint8_t * payload, size_t length);
8282

83+
bool sendPing(uint8_t num, uint8_t * payload = NULL, size_t length = 0);
84+
bool sendPing(uint8_t num, String & payload);
85+
86+
bool broadcastPing(uint8_t * payload = NULL, size_t length = 0);
87+
bool broadcastPing(String & payload);
88+
8389
void disconnect(void);
8490
void disconnect(uint8_t num);
8591

0 commit comments

Comments
 (0)
0