From 403752a942f797d735539606a904fefc312e91eb Mon Sep 17 00:00:00 2001 From: sascha lammers Date: Wed, 2 Oct 2019 04:16:43 -0700 Subject: [PATCH] Added method to access clients of AsyncWebSocket (#583) * Added method to access clients of AsyncWebSocket * https://github.com/me-no-dev/ESPAsyncWebServer/issues/571 * Conflict with crypto library --- src/AsyncWebSocket.cpp | 3 +++ src/AsyncWebSocket.h | 9 ++++++++- src/WebResponses.cpp | 1 + 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/AsyncWebSocket.cpp b/src/AsyncWebSocket.cpp index d1b3eab..e4592a3 100644 --- a/src/AsyncWebSocket.cpp +++ b/src/AsyncWebSocket.cpp @@ -1236,6 +1236,9 @@ void AsyncWebSocket::_cleanBuffers() } } +AsyncWebSocket::AsyncWebSocketClientLinkedList AsyncWebSocket::getClients() const { + return _clients; +} /* * Response to Web Socket request - sends the authorization and detaches the TCP Client from the web server diff --git a/src/AsyncWebSocket.h b/src/AsyncWebSocket.h index 0234dd7..40cc03f 100644 --- a/src/AsyncWebSocket.h +++ b/src/AsyncWebSocket.h @@ -35,6 +35,9 @@ #ifdef ESP8266 #include +#ifdef CRYPTO_HASH_h // include Hash.h from espressif framework if the first include was from the crypto library +#include <../src/Hash.h> +#endif #endif #ifdef ESP32 @@ -238,9 +241,11 @@ typedef std::function AsyncWebSocketClientLinkedList; private: String _url; - LinkedList _clients; + AsyncWebSocketClientLinkedList _clients; uint32_t _cNextId; AwsEventHandler _eventHandler; bool _enabled; @@ -325,6 +330,8 @@ class AsyncWebSocket: public AsyncWebHandler { AsyncWebSocketMessageBuffer * makeBuffer(uint8_t * data, size_t size); LinkedList _buffers; void _cleanBuffers(); + + AsyncWebSocketClientLinkedList getClients() const; }; //WebServer response to authenticate the socket and detach the tcp client from the web server request diff --git a/src/WebResponses.cpp b/src/WebResponses.cpp index cca6b53..272ab70 100644 --- a/src/WebResponses.cpp +++ b/src/WebResponses.cpp @@ -446,6 +446,7 @@ size_t AsyncAbstractResponse::_fillBufferAndProcessTemplates(uint8_t* data, size _cache.insert(_cache.begin(), &data[originalLen - (pTemplateStart + numBytesCopied - pTemplateEnd - 1)], &data[len]); //2. parameter value is longer than placeholder text, push the data after placeholder which not saved into cache further to the end memmove(pTemplateStart + numBytesCopied, pTemplateEnd + 1, &data[originalLen] - pTemplateStart - numBytesCopied); + len = originalLen; // fix issue with truncated data, not sure if it has any side effects } else if(pTemplateEnd + 1 != pTemplateStart + numBytesCopied) //2. Either parameter value is shorter than placeholder text OR there is enough free space in buffer to fit. // Move the entire data after the placeholder