8000 Merge pull request #223 from robokoding/master · Quanghoster/arduinoWebSockets@fa580a5 · GitHub
[go: up one dir, main page]

Skip to content

Commit fa580a5

Browse files
authored
Merge pull request Links2004#223 from robokoding/master
Add ESP32 support from @robokoding
2 parents 1bd4638 + a93a845 commit fa580a5

File tree

6 files changed

+41
-21
lines changed

6 files changed

+41
-21
lines changed

src/WebSockets.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ extern "C" {
3838

3939
#ifdef ESP8266
4040
#include <Hash.h>
41+
#elif defined(ESP32)
42+
#include <hwcrypto/sha.h>
4143
#else
4244

4345
extern "C" {
@@ -483,6 +485,9 @@ String WebSockets::acceptKey(String & clientKey) {
483485
uint8_t sha1HashBin[20] = { 0 };
484486
#ifdef ESP8266
485487
sha1(clientKey + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11", &sha1HashBin[0]);
488+
#elif defined(ESP32)
489+
String data = clientKey + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
490+
esp_sha(SHA1, (unsigned char*)data.c_str(), data.length(), &sha1HashBin[0]);
486491
#else
487492
clientKey += "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
488493
SHA1_CTX ctx;

src/WebSockets.h

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
#define NETWORK_ESP8266 (1)
7474
#define NETWORK_W5100 (2)
7575
#define NETWORK_ENC28J60 (3)
76+
#define NETWORK_ESP32 (4)
7677

7778
// max size of the WS Message Header
7879
#define WEBSOCKETS_MAX_HEADER_SIZE (14)
@@ -83,6 +84,8 @@
8384
#define WEBSOCKETS_NETWORK_TYPE NETWORK_ESP8266
8485
//#define WEBSOCKETS_NETWORK_TYPE NETWORK_ESP8266_ASYNC
8586
//#define WEBSOCKETS_NETWORK_TYPE NETWORK_W5100
87+
#elif defined(ESP32)
88+
#define WEBSOCKETS_NETWORK_TYPE NETWORK_ESP32
8689
#else
8790
#define WEBSOCKETS_NETWORK_TYPE NETWORK_W5100
8891
#endif
@@ -140,6 +143,13 @@
140143
#define WEBSOCKETS_NETWORK_CLASS UIPClient
141144
#define WEBSOCKETS_NETWORK_SERVER_CLASS UIPServer
142145

146+
#elif (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32)
147+
148+
#include <WiFi.h>
149+
#include <WiFiClientSecure.h>
150+
#define WEBSOCKETS_NETWORK_CLASS WiFiClient
151+
#define WEBSOCKETS_NETWORK_SERVER_CLASS WiFiServer
152+
143153
#else
144154
#error "no network type selected!"
145155
#endif
@@ -204,7 +214,7 @@ typedef struct {
204214

205215
bool isSocketIO; ///< client for socket.io server
206216

207-
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266)
217+
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32)
208218
bool isSSL; ///< run in ssl mode
209219
WiFiClientSecure * ssl;
210220
#endif

src/WebSocketsClient.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,14 @@ WebSocketsClient::~WebSocketsClient() {
4242
void WebSocketsClient::begin(const char *host, uint16_t port, const char * url, const char * protocol) {
4343
_host = host;
4444
_port = port;
45-
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266)
45+
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32)
4646
_fingerprint = "";
4747
#endif
4848

4949
_client.num = 0;
5050
_client.status = WSC_NOT_CONNECTED;
5151
_client.tcp = NULL;
52-
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266)
52+
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32)
5353
_client.isSSL = false;
5454
_client.ssl = NULL;
5555
#endif
@@ -84,7 +84,7 @@ void WebSocketsClient::begin(String host, uint16_t port, String url, String prot
8484
begin(host.c_str(), port, url.c_str(), protocol.c_str());
8585
}
8686

87-
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266)
87+
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32)
8888
void WebSocketsClient::beginSSL(const char *host, uint16_t port, const char * url, const char * fingerprint, const char * protocol) {
8989
begin(host, port, url, protocol);
9090
_client.isSSL = true;
@@ -105,7 +105,7 @@ void WebSocketsClient::beginSocketIO(String host, uint16_t port, String url, Str
105105
beginSocketIO(host.c_str(), port, url.c_str(), protocol.c_str());
106106
}
107107

108-
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266)
108+
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32)
109109
void WebSocketsClient::beginSocketIOSSL(const char *host, uint16_t port, const char * url, const char * protocol) {
110110
begin(host, port, url, protocol);
111111
_client.isSocketIO = true;
@@ -129,7 +129,7 @@ void WebSocketsClient::loop(void) {
129129
return;
130130
}
131131

132-
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266)
132+
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32)
133133
if(_client.isSSL) {
134134
DEBUG_WEBSOCKETS("[WS-Client] connect wss...\n");
135135
if(_client.ssl) {
@@ -341,7 +341,7 @@ void WebSocketsClient::clientDisconnect(WSclient_t * client) {
341341

342342
bool event = false;
343343

344-
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266)
344+
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32)
345345
if(client->isSSL && client->ssl) {
346346
if(client->ssl->connected()) {
347347
client->ssl->flush();
@@ -440,7 +440,7 @@ void WebSocketsClient::handleClientData(void) {
440440
break;
441441
}
442442
}
443-
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266)
443+
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32)
444444
delay(0);
445445
#endif
446446
}

src/WebSocketsClient.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,15 +42,15 @@ class WebSocketsClient: private WebSockets {
4242
void begin(const char *host, uint16_t port, const char * url = "/", const char * protocol = "arduino");
4343
void begin(String host, uint16_t port, String url = "/", String protocol = "arduino");
4444

45-
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266)
45+
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32)
4646
void beginSSL(const char *host, uint16_t port, const char * url = "/", const char * = "", const char * protocol = "arduino");
4747
void beginSSL(String host, uint16_t port, String url = "/", String fingerprint = "", String protocol = "arduino");
4848
#endif
4949

5050
void beginSocketIO(const char *host, uint16_t port, const char * url = "/socket.io/?EIO=3", const char * protocol = "arduino");
5151
void beginSocketIO(String host, uint16_t port, String url = "/socket.io/?EIO=3", String protocol = "arduino");
5252

53-
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266)
53+
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32)
5454
void beginSocketIOSSL(const char *host, uint16_t port, const char * url = "/socket.io/?EIO=3", const char * protocol = "arduino");
5555
void beginSocketIOSSL(String host, uint16_t port, String url = "/socket.io/?EIO=3", String protocol = "arduino");
5656
#endif
@@ -89,7 +89,7 @@ class WebSocketsClient: private WebSockets {
8989
String _host;
9090
uint16_t _port;
9191

92-
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266)
92+
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32)
9393
String _fingerprint;
9494
#endif
9595
WSclient_t _client;

src/WebSocketsServer.cpp

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ WebSocketsServer::~WebSocketsServer() {
5252

5353
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266)
5454
_server->close();
55+
#elif (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32)
56+
_server->end();
5557
#else
5658
// TODO how to close server?
5759
#endif
@@ -75,7 +77,7 @@ void WebSocketsServer::begin(void) {
7577
client->num = i;
7678
client->status = WSC_NOT_CONNECTED;
7779
client->tcp = NULL;
78-
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266)
80+
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32)
7981
client->isSSL = false;
8082
client->ssl = NULL;
8183
#endif
@@ -98,6 +100,9 @@ void WebSocketsServer::begin(void) {
98100

99101
#ifdef ESP8266
100102
randomSeed(RANDOM_REG32);
103+
#elif defined(ESP32)
104+
#define DR_REG_RNG_BASE 0x3ff75144
105+
randomSeed(READ_PERI_REG(DR_REG_RNG_BASE));
101106
#else
102107
// TODO find better seed
103108
randomSeed(millis());
@@ -386,7 +391,7 @@ void WebSocketsServer::setAuthorization(const char * auth) {
386391
}
387392
}
388393

389-
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266_ASYNC)
394+
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266_ASYNC) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32)
390395
/**
391396
* get an IP for a client
392397
* @param num uint8_t client id
@@ -423,7 +428,7 @@ bool WebSocketsServer::newClient(WEBSOCKETS_NETWORK_CLASS * TCPclient) {
423428

424429
client->tcp = TCPclient;
425430

426-
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266)
431+
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32)
427432
client->isSSL = false;
428433
client->tcp->setNoDelay(true);
429434
#endif
@@ -432,7 +437,7 @@ bool WebSocketsServer::newClient(WEBSOCKETS_NETWORK_CLASS * TCPclient) {
432437
client->tcp->setTimeout(WEBSOCKETS_TCP_TIMEOUT);
433438
#endif
434439
client->status = WSC_HEADER;
435-
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266_ASYNC)
440+
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266_ASYNC) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32)
436441
IPAddress ip = client->tcp->remoteIP();
437442
DEBUG_WEBSOCKETS("[WS-Server][%d] new client from %d.%d.%d.%d\n", client->num, ip[0], ip[1], ip[2], ip[3]);
438443
#else
@@ -496,7 +501,7 @@ void WebSocketsServer::messageReceived(WSclient_t * client, WSopcode_t opcode, u
496501
void WebSocketsServer::clientDisconnect(WSclient_t * client) {
497502

498503

499-
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266)
504+
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32)
500505
if(client->isSSL && client->ssl) {
501506
if(client->ssl->connected()) {
502507
client->ssl->flush();
@@ -582,12 +587,12 @@ bool WebSocketsServer::clientIsConnected(WSclient_t * client) {
582587
*/
583588
void WebSocketsServer::handleNewClients(void) {
584589

585-
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266)
590+
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32)
586591
while(_server->hasClient()) {
587592
#endif
588593
bool ok = false;
589594

590-
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266)
595+
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32)
591596
// store new connection
592597
WEBSOCKETS_NETWORK_CLASS * tcpClient = new WEBSOCKETS_NETWORK_CLASS(_server->available());
593598
#else
@@ -603,7 +608,7 @@ void WebSocketsServer::handleNewClients(void) {
603608

604609
if(!ok) {
605610
// no free space to handle client
606-
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266)
611+
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32)
607612
IPAddress ip = tcpClient->remoteIP();
608613
DEBUG_WEBSOCKETS("[WS-Server] no free space new client from %d.%d.%d.%d\n", ip[0], ip[1], ip[2], ip[3]);
609614
#else
@@ -612,7 +617,7 @@ void WebSocketsServer::handleNewClients(void) {
612617
tcpClient->stop();
613618
}
614619

615-
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266)
620+
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32)
616621
delay(0);
617622
}
618623
#endif

src/WebSocketsServer.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ class WebSocketsServer: protected WebSockets {
9292
void setAuthorization(const char * user, const char * password);
9393
void setAuthorization(const char * auth);
9494

95-
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266_ASYNC)
95+
#if (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266_ASYNC) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32)
9696
IPAddress remoteIP(uint8_t num);
9797
#endif
9898

0 commit comments

Comments
 (0)
0