From 3a2b757155d7fe151be0516f43ca7e8288eac32f Mon Sep 17 00:00:00 2001 From: Links Date: Sun, 31 Jan 2021 10:27:36 +0100 Subject: [PATCH 1/2] EIO=4 ping handling #611 --- src/SocketIOclient.cpp | 24 +++++++++++++++++++++--- src/SocketIOclient.h | 5 +++++ src/WebSocketsClient.cpp | 3 +++ 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/SocketIOclient.cpp b/src/SocketIOclient.cpp index 8fd8ad5..a06efa2 100644 --- a/src/SocketIOclient.cpp +++ b/src/SocketIOclient.cpp @@ -18,31 +18,37 @@ SocketIOclient::~SocketIOclient() { void SocketIOclient::begin(const char * host, uint16_t port, const char * url, const char * protocol) { WebSocketsClient::beginSocketIO(host, port, url, protocol); WebSocketsClient::enableHeartbeat(60 * 1000, 90 * 1000, 5); + initClient(); } void SocketIOclient::begin(String host, uint16_t port, String url, String protocol) { WebSocketsClient::beginSocketIO(host, port, url, protocol); WebSocketsClient::enableHeartbeat(60 * 1000, 90 * 1000, 5); + initClient(); } #if defined(HAS_SSL) void SocketIOclient::beginSSL(const char * host, uint16_t port, const char * url, const char * protocol) { WebSocketsClient::beginSocketIOSSL(host, port, url, protocol); WebSocketsClient::enableHeartbeat(60 * 1000, 90 * 1000, 5); + initClient(); } void SocketIOclient::beginSSL(String host, uint16_t port, String url, String protocol) { WebSocketsClient::beginSocketIOSSL(host, port, url, protocol); WebSocketsClient::enableHeartbeat(60 * 1000, 90 * 1000, 5); + initClient(); } -#if !defined(SSL_AXTLS) +#if defined(SSL_BARESSL) void SocketIOclient::beginSSLWithCA(const char * host, uint16_t port, const char * url, const char * CA_cert, const char * protocol) { WebSocketsClient::beginSocketIOSSLWithCA(host, port, url, CA_cert, protocol); WebSocketsClient::enableHeartbeat(60 * 1000, 90 * 1000, 5); + initClient(); } void SocketIOclient::beginSSLWithCA(const char * host, uint16_t port, const char * url, BearSSL::X509List * CA_cert, const char * protocol) { WebSocketsClient::beginSocketIOSSLWithCA(host, port, url, CA_cert, protocol); WebSocketsClient::enableHeartbeat(60 * 1000, 90 * 1000, 5); + initClient(); } void SocketIOclient::setSSLClientCertKey(const char * clientCert, const char * clientPrivateKey) { @@ -55,6 +61,18 @@ void SocketIOclient::setSSLClientCertKey(BearSSL::X509List * clientCert, BearSSL #endif #endif + +void SocketIOclient::configureEIOping(bool disableHeartbeat) { + _disableHeartbeat = disableHeartbeat; +} + +void SocketIOclient::initClient(void) { + if(_client.cUrl.indexOf("EIO=4") != -1) { + DEBUG_WEBSOCKETS("[wsIOc] found EIO=4 disable EIO ping on client\n"); + configureEIOping(true); + } +} + /** * set callback function * @param cbEvent SocketIOclientEvent @@ -148,8 +166,8 @@ bool SocketIOclient::sendEVENT(String & payload) { void SocketIOclient::loop(void) { WebSocketsClient::loop(); unsigned long t = millis(); - if((t - _lastConnectionFail) > EIO_HEARTBEAT_INTERVAL) { - _lastConnectionFail = t; + if(!_disableHeartbeat && (t - _lastHeartbeat) > EIO_HEARTBEAT_INTERVAL) { + _lastHeartbeat = t; DEBUG_WEBSOCKETS("[wsIOc] send ping\n"); WebSocketsClient::sendTXT(eIOtype_PING); } diff --git a/src/SocketIOclient.h b/src/SocketIOclient.h index cf674cb..6deb168 100644 --- a/src/SocketIOclient.h +++ b/src/SocketIOclient.h @@ -77,7 +77,10 @@ class SocketIOclient : protected WebSocketsClient { void loop(void); + void configureEIOping(bool disableHeartbeat = false); + protected: + bool _disableHeartbeat = false; uint64_t _lastHeartbeat = 0; SocketIOclientEvent _cbEvent; virtual void runIOCbEvent(socketIOmessageType_t type, uint8_t * payload, size_t length) { @@ -86,6 +89,8 @@ class SocketIOclient : protected WebSocketsClient { } } + void initClient(void); + // Handeling events from websocket layer virtual void runCbEvent(WStype_t type, uint8_t * payload, size_t length) { handleCbEvent(type, payload, length); diff --git a/src/WebSocketsClient.cpp b/src/WebSocketsClient.cpp index 8583ede..50ed631 100644 --- a/src/WebSocketsClient.cpp +++ b/src/WebSocketsClient.cpp @@ -945,6 +945,9 @@ void WebSocketsClient::handleHBPing() { if(sendPing()) { _client.lastPing = millis(); _client.pongReceived = false; + } else { + DEBUG_WEBSOCKETS("[WS-Client] sending HB ping failed\n"); + WebSockets::clientDisconnect(&_client, 1000); } } } From 435519912005cb1cb103b075f1c53c8ef04fa7e0 Mon Sep 17 00:00:00 2001 From: Links Date: Sun, 31 Jan 2021 20:31:52 +0100 Subject: [PATCH 2/2] bump version 2.3.4 --- library.json | 2 +- library.properties | 2 +- src/WebSocketsVersion.h | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/library.json b/library.json index 2643ba6..8f96629 100644 --- a/library.json +++ b/library.json @@ -21,5 +21,5 @@ "type": "git", "url": "https://github.com/Links2004/arduinoWebSockets.git" }, - "version": "2.3.3" + "version": "2.3.4" } \ No newline at end of file diff --git a/library.properties b/library.properties index 4ff5abc..a9bff7a 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=WebSockets -version=2.3.3 +version=2.3.4 author=Markus Sattler maintainer=Markus Sattler sentence=WebSockets for Arduino (Server + Client) diff --git a/src/WebSocketsVersion.h b/src/WebSocketsVersion.h index 09075d8..2194280 100644 --- a/src/WebSocketsVersion.h +++ b/src/WebSocketsVersion.h @@ -1,6 +1,6 @@ /** * @file WebSocketsVersion.h - * @date 07.01.2021 + * @date 31.01.2021 * @author Markus Sattler * * Copyright (c) 2015 Markus Sattler. All rights reserved. @@ -25,12 +25,12 @@ #ifndef WEBSOCKETSVERSION_H_ #define WEBSOCKETSVERSION_H_ -#define WEBSOCKETS_VERSION "2.3.3" +#define WEBSOCKETS_VERSION "2.3.4" #define WEBSOCKETS_VERSION_MAJOR 2 #define WEBSOCKETS_VERSION_MINOR 3 -#define WEBSOCKETS_VERSION_PATCH 3 +#define WEBSOCKETS_VERSION_PATCH 4 -#define WEBSOCKETS_VERSION_INT 2003003 +#define WEBSOCKETS_VERSION_INT 2003004 #endif /* WEBSOCKETSVERSION_H_ */