From 645e90379c6eb38202e7e7560d63bad248b25626 Mon Sep 17 00:00:00 2001 From: Dmitry Borisenko <49808844+DmitryBorisenko33@users.noreply.github.com> Date: Sat, 8 Oct 2022 00:28:45 +0200 Subject: [PATCH] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D1=8F=D0=B5=D0=BC=20=D0=B1=D0=B8=D0=B1=D0=BB=D0=B8=D0=BE=D1=82?= =?UTF-8?q?=D0=B5=D0=BA=D1=83=20=D1=81=D0=BE=D0=BA=D0=B5=D1=82=D0=BE=D0=B2?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20?= =?UTF-8?q?=D1=81=20=D1=84=D1=80=D0=B5=D0=B9=D0=BC=D0=B0=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/WebSockets/src/WebSocketsServer.cpp | 8 ++++++-- lib/WebSockets/src/WebSocketsServer.h | 2 +- src/WsServer.cpp | 18 +++++++++++++----- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/lib/WebSockets/src/WebSocketsServer.cpp b/lib/WebSockets/src/WebSocketsServer.cpp index e8da8a3c..5c5abea8 100644 --- a/lib/WebSockets/src/WebSocketsServer.cpp +++ b/lib/WebSockets/src/WebSocketsServer.cpp @@ -225,13 +225,17 @@ bool WebSocketsServerCore::broadcastTXT(String & payload) { * @param headerToPayload bool (see sendFrame for more details) * @return true if ok */ -bool WebSocketsServerCore::sendBIN(uint8_t num, uint8_t * payload, size_t length, bool fin, bool headerToPayload) { +bool WebSocketsServerCore::sendBIN(uint8_t num, uint8_t * payload, size_t length, bool fin, bool continuation, bool headerToPayload) { if(num >= WEBSOCKETS_SERVER_CLIENT_MAX) { return false; } WSclient_t * client = &_clients[num]; if(clientIsConnected(client)) { - return sendFrame(client, WSop_binary, payload, length, fin, headerToPayload); + if(continuation) { + return sendFrame(client, WSop_continuation, payload, length, fin, headerToPayload); + } else { + return sendFrame(client, WSop_binary, payload, length, fin, headerToPayload); + } } return false; } diff --git a/lib/WebSockets/src/WebSocketsServer.h b/lib/WebSockets/src/WebSocketsServer.h index 16461787..cd224dd2 100644 --- a/lib/WebSockets/src/WebSocketsServer.h +++ b/lib/WebSockets/src/WebSocketsServer.h @@ -65,7 +65,7 @@ class WebSocketsServerCore : protected WebSockets { bool broadcastTXT(const char * payload, size_t length = 0); bool broadcastTXT(String & payload); - bool sendBIN(uint8_t num, uint8_t * payload, size_t length, bool fin = true, bool headerToPayload = false); + bool sendBIN(uint8_t num, uint8_t * payload, size_t length, bool fin = true, bool continuation = false, bool headerToPayload = false); bool sendBIN(uint8_t num, const uint8_t * payload, size_t length); bool broadcastBIN(uint8_t * payload, size_t length, bool fin = true, bool headerToPayload = false); diff --git a/src/WsServer.cpp b/src/WsServer.cpp index d713b12e..7ed90a58 100644 --- a/src/WsServer.cpp +++ b/src/WsServer.cpp @@ -433,15 +433,23 @@ void sendBlobToWsStrHeader(const String& filename, const String& header, uint8_t size_t payloadSize = file.read(payloadBuf, maxPayloadSize); if (payloadSize) { size_t size = headerSize + payloadSize; + bool fin = false; - if (i == 16) { - fin = true; - } else { + if (size == frameSize) { fin = false; + } else { + fin = true; } - SerialPrint("I", "FS", String(size) + " " + String(fin) + " " + String(i)); - standWebSocket.sendBIN(client_id, frameBuf, size, fin); + bool continuation = false; + if (i == 0) { + continuation = false; + } else { + continuation = true; + } + + SerialPrint("I", "FS", String(i) + ") sz: " + String(size) + " fin: " + String(fin) + " cnt: " + String(continuation)); + standWebSocket.sendBIN(client_id, frameBuf, size, fin, continuation); } i++; }