Update to version 3.9.6

This commit is contained in:
2026-02-10 12:34:12 +01:00
parent 2617252395
commit c98a476228
94 changed files with 4593 additions and 1434 deletions

View File

@@ -1,8 +1,7 @@
// SPDX-License-Identifier: LGPL-3.0-or-later
// Copyright 2016-2025 Hristo Gochkov, Mathieu Carbou, Emil Muratov
// Copyright 2016-2026 Hristo Gochkov, Mathieu Carbou, Emil Muratov, Will Miles
#ifndef ASYNCWEBSOCKET_H_
#define ASYNCWEBSOCKET_H_
#pragma once
#include <Arduino.h>
@@ -30,7 +29,11 @@
#endif
#include <ESPAsyncWebServer.h>
#include <AsyncWebServerLogging.h>
#include <cstdio>
#include <deque>
#include <list>
#include <memory>
#ifdef ESP8266
@@ -80,9 +83,7 @@ public:
_data = (uint8_t *)malloc(_len);
if (_data == NULL) {
#ifdef ESP32
log_e("Failed to allocate");
#endif
async_ws_log_e("Failed to allocate");
_len = 0;
} else {
memcpy(_data, data, len);
@@ -212,6 +213,9 @@ private:
AsyncWebSocket *_server;
uint32_t _clientId;
AwsClientStatus _status;
uint8_t _pstate;
uint32_t _lastMessageTime;
uint32_t _keepAlivePeriod;
#ifdef ESP32
mutable std::recursive_mutex _lock;
#endif
@@ -219,12 +223,8 @@ private:
std::deque<AsyncWebSocketMessage> _messageQueue;
bool closeWhenFull = true;
uint8_t _pstate;
AwsFrameInfo _pinfo;
uint32_t _lastMessageTime;
uint32_t _keepAlivePeriod;
bool _queueControl(uint8_t opcode, const uint8_t *data = NULL, size_t len = 0, bool mask = false);
bool _queueMessage(AsyncWebSocketSharedBuffer buffer, uint8_t opcode = WS_TEXT, bool mask = false);
void _runQueue();
@@ -233,7 +233,15 @@ private:
public:
void *_tempObject;
AsyncWebSocketClient(AsyncWebServerRequest *request, AsyncWebSocket *server);
AsyncWebSocketClient(AsyncClient *client, AsyncWebSocket *server);
/**
* @brief Construct a new Async Web Socket Client object
* @note constructor would take the ownership of of AsyncTCP's client pointer from `request` parameter and call delete on it!
* @param request
* @param server
*/
AsyncWebSocketClient(AsyncWebServerRequest *request, AsyncWebSocket *server) : AsyncWebSocketClient(request->clientRelease(), server){};
~AsyncWebSocketClient();
// client id increments for the given server
@@ -448,8 +456,8 @@ public:
AsyncWebSocketClient *_newClient(AsyncWebServerRequest *request);
void _handleDisconnect(AsyncWebSocketClient *client);
void _handleEvent(AsyncWebSocketClient *client, AwsEventType type, void *arg, uint8_t *data, size_t len);
bool canHandle(AsyncWebServerRequest *request) const override final;
void handleRequest(AsyncWebServerRequest *request) override final;
bool canHandle(AsyncWebServerRequest *request) const final;
void handleRequest(AsyncWebServerRequest *request) final;
// messagebuffer functions/objects.
AsyncWebSocketMessageBuffer *makeBuffer(size_t size = 0);
@@ -465,11 +473,16 @@ class AsyncWebSocketResponse : public AsyncWebServerResponse {
private:
String _content;
AsyncWebSocket *_server;
AsyncWebServerRequest *_request;
// this call back will switch AsyncTCP client to WebSocket
void _switchClient();
public:
AsyncWebSocketResponse(const String &key, AsyncWebSocket *server);
void _respond(AsyncWebServerRequest *request);
size_t _ack(AsyncWebServerRequest *request, size_t len, uint32_t time);
size_t _ack(AsyncWebServerRequest *request, size_t len, uint32_t time) override {
return 0;
};
bool _sourceValid() const {
return true;
}
@@ -556,5 +569,3 @@ private:
}
};
};
#endif /* ASYNCWEBSOCKET_H_ */