diff --git a/src/WebSockets.h b/src/WebSockets.h index 91d95eb..fa200b0 100644 --- a/src/WebSockets.h +++ b/src/WebSockets.h @@ -258,7 +258,19 @@ typedef struct { uint8_t * maskKey; } WSMessageHeader_t; -typedef struct { +struct WSclient_t { + + WSclient_t() = default; + + WSclient_t(uint8_t num, uint32_t pingInterval, uint32_t pongTimeout, uint8_t disconnectTimeoutCount): + num(num), + status(WSC_NOT_CONNECTED), + pingInterval(pingInterval), + pongTimeout(pongTimeout), + disconnectTimeoutCount(disconnectTimeoutCount) + { + } + uint8_t num; ///< connection number WSclientsStatus_t status; @@ -309,7 +321,7 @@ typedef struct { String cHttpLine; ///< HTTP header lines #endif -} WSclient_t; +}; class WebSockets { protected: diff --git a/src/WebSockets4WebServer.h b/src/WebSockets4WebServer.h index 01a7f8a..ba2b020 100644 --- a/src/WebSockets4WebServer.h +++ b/src/WebSockets4WebServer.h @@ -41,6 +41,8 @@ class WebSockets4WebServer : public WebSocketsServerCore { onEvent(event); return [&, wsRootDir](const String & method, const String & url, WiFiClient * tcpClient, ESP8266WebServer::ContentTypeFunction contentType) { + (void)contentType; + if(!(method == "GET" && url.indexOf(wsRootDir) == 0)) { return ESP8266WebServer::CLIENT_REQUEST_CAN_CONTINUE; } diff --git a/src/WebSocketsServer.cpp b/src/WebSocketsServer.cpp index 20b2373..1b85ecb 100644 --- a/src/WebSocketsServer.cpp +++ b/src/WebSocketsServer.cpp @@ -38,8 +38,6 @@ WebSocketsServerCore::WebSocketsServerCore(const String & origin, const String & _httpHeaderValidationFunc = NULL; _mandatoryHttpHeaders = NULL; _mandatoryHttpHeaderCount = 0; - - memset(&_clients[0], 0x00, (sizeof(WSclient_t) * WEBSOCKETS_SERVER_CLIENT_MAX)); } WebSocketsServer::WebSocketsServer(uint16_t port, const String & origin, const String & protocol) @@ -73,47 +71,15 @@ WebSocketsServer::~WebSocketsServer() { * called to initialize the Websocket server */ void WebSocketsServerCore::begin(void) { - WSclient_t * client; - // init client storage - for(uint8_t i = 0; i < WEBSOCKETS_SERVER_CLIENT_MAX; i++) { - client = &_clients[i]; + for (int i = 0; i < WEBSOCKETS_SERVER_CLIENT_MAX; i++) { + WSclient_t * client = &_clients[i]; - client->num = i; - client->status = WSC_NOT_CONNECTED; - client->tcp = NULL; -#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32) - client->isSSL = false; - client->ssl = NULL; -#endif - client->cUrl = ""; - client->cCode = 0; - - client->cIsClient = false; - client->cIsUpgrade = false; - client->cIsWebsocket = false; - - client->cSessionId = ""; - client->cKey = ""; - client->cAccept = ""; - client->cProtocol = ""; - client->cExtensions = ""; - client->cVersion = 0; - - client->cWsRXsize = 0; - - client->base64Authorization = ""; - client->plainAuthorization = ""; - - client->extraHeaders = ""; - -#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266_ASYNC) - client->cHttpLine = ""; -#endif - - client->pingInterval = _pingInterval; - client->pongTimeout = _pongTimeout; - client->disconnectTimeoutCount = _disconnectTimeoutCount; + // reset instance: + // destructor in place + client->~WSclient_t(); + // constructor in place + new (client) WSclient_t(i, _pingInterval, _pongTimeout, _disconnectTimeoutCount); } #ifdef ESP8266