25
25
#include " WebSockets.h"
26
26
#include " WebSocketsServer.h"
27
27
28
- extern " C" {
29
- #include " libb64/cencode.h"
30
- }
31
-
32
- #include < Hash.h>
33
-
34
28
WebSocketsServer::WebSocketsServer (uint16_t port) {
35
29
_port = port;
36
30
_server = new WiFiServer (port);
@@ -95,12 +89,27 @@ void WebSocketsServer::sendTXT(uint8_t num, uint8_t * payload, size_t length) {
95
89
if (num >= WEBSOCKETS_SERVER_CLIENT_MAX) {
96
90
return ;
97
91
}
92
+ if (length == 0 ) {
93
+ length = strlen ((const char *) payload);
94
+ }
98
95
WSclient_t * client = &_clients[num];
99
96
if (clientIsConnected (client)) {
100
97
sendFrame (client, WSop_text, payload, length);
101
98
}
102
99
}
103
100
101
+ void WebSocketsServer::sendTXT (uint8_t num, const uint8_t * payload, size_t length) {
102
+ sendTXT (num, (uint8_t *) payload, length);
103
+ }
104
+
105
+ void WebSocketsServer::sendTXT (uint8_t num, char * payload, size_t length) {
106
+ sendTXT (num, (uint8_t *) payload, length);
107
+ }
108
+
109
+ void WebSocketsServer::sendTXT (uint8_t num, const char * payload, size_t length) {
110
+ sendTXT (num, (uint8_t *) payload, length);
111
+ }
112
+
104
113
void WebSocketsServer::sendTXT (uint8_t num, String payload) {
105
114
sendTXT (num, (uint8_t *) payload.c_str (), payload.length ());
106
115
}
@@ -112,6 +121,9 @@ void WebSocketsServer::sendTXT(uint8_t num, String payload) {
112
121
*/
113
122
void WebSocketsServer::broadcastTXT (uint8_t * payload, size_t length) {
114
123
WSclient_t * client;
124
+ if (length == 0 ) {
125
+ length = strlen ((const char *) payload);
126
+ }
115
127
for (uint8_t i = 0 ; i < WEBSOCKETS_SERVER_CLIENT_MAX; i++) {
116
128
client = &_clients[i];
117
129
if (clientIsConnected (client)) {
@@ -120,6 +132,18 @@ void WebSocketsServer::broadcastTXT(uint8_t * payload, size_t length) {
120
132
}
121
133
}
122
134
135
+ void WebSocketsServer::broadcastTXT (const uint8_t * payload, size_t length) {
136
+ broadcastTXT ((uint8_t *) payload, length);
137
+ }
138
+
139
+ void WebSocketsServer::broadcastTXT (char * payload, size_t length) {
140
+ broadcastTXT ((uint8_t *) payload, length);
141
+ }
142
+
143
+ void WebSocketsServer::broadcastTXT (const char * payload, size_t length) {
144
+ broadcastTXT ((uint8_t *) payload, length);
145
+ }
146
+
123
147
void WebSocketsServer::broadcastTXT (String payload) {
124
148
broadcastTXT ((uint8_t *) payload.c_str (), payload.length ());
125
149
}
@@ -140,6 +164,10 @@ void WebSocketsServer::sendBIN(uint8_t num, uint8_t * payload, size_t length) {
140
164
}
141
165
}
142
166
167
+ void WebSocketsServer::sendBIN (uint8_t num, const uint8_t * payload, size_t length) {
168
+ sendBIN (num, (uint8_t *) payload, length);
169
+ }
170
+
143
171
/* *
144
172
* send binary data to client all
145
173
* @param payload uint8_t *
@@ -155,6 +183,10 @@ void WebSocketsServer::broadcastBIN(uint8_t * payload, size_t length) {
155
183
}
156
184
}
157
185
186
+ void WebSocketsServer::broadcastBIN (const uint8_t * payload, size_t length) {
187
+ broadcastBIN ((uint8_t *) payload, length);
188
+ }
189
+
158
190
// #################################################################################
159
191
// #################################################################################
160
192
// #################################################################################
@@ -289,7 +321,7 @@ void WebSocketsServer::handleClientData(void) {
289
321
WebSockets::handleWebsocket (client);
290
322
break ;
291
323
default :
292
- clientDisconnect (client);
324
+ WebSockets:: clientDisconnect (client, 1002 );
293
325
break ;
294
326
}
295
327
}
@@ -363,19 +395,7 @@ void WebSocketsServer::handleHeader(WSclient_t * client) {
363
395
DEBUG_WEBSOCKETS (" [WS-Server][%d][handleHeader] Websocket connection incomming.\n " , client->num );
364
396
365
397
// generate Sec-WebSocket-Accept key
366
- uint8_t sha1HashBin[20 ] = { 0 };
367
- sha1 (client->cKey + " 258EAFA5-E914-47DA-95CA-C5AB0DC85B11" , &sha1HashBin[0 ]);
368
-
369
- char sha1Base64[64 ] = { 0 };
370
- int len = 0 ;
371
-
372
- base64_encodestate _state;
373
- base64_init_encodestate (&_state);
374
- len = base64_encode_block ((const char *) &sha1HashBin[0 ], 20 , &sha1Base64[0 ], &_state);
375
- base64_encode_blockend ((sha1Base64 + len), &_state);
376
-
377
- client->sKey = sha1Base64;
378
- client->sKey .trim ();
398
+ client->sKey = acceptKey (client->cKey );
379
399
380
400
DEBUG_WEBSOCKETS (" [WS-Server][%d][handleHeader] - sKey: %s\n " , client->num , client->sKey .c_str ());
381
401
@@ -398,8 +418,11 @@ void WebSocketsServer::handleHeader(WSclient_t * client) {
398
418
// header end
399
419
client->tcp .write (" \r\n " );
400
420
421
+ // send ping
422
+ WebSockets::sendFrame (client, WSop_ping);
423
+
401
424
if (_cbEvent) {
402
- _cbEvent (client->num , WStype_CONNECTED, NULL , 0 );
425
+ _cbEvent (client->num , WStype_CONNECTED, ( uint8_t *)client-> cUrl . c_str (), client-> cUrl . length () );
403
426
}
404
427
405
428
} else {
0 commit comments