From f856cdf37e86f9a29e982c9b6d3d6055040d7e1c Mon Sep 17 00:00:00 2001 From: TopchetoEU <36534413+TopchetoEU@users.noreply.github.com> Date: Sat, 4 Nov 2023 11:41:31 +0200 Subject: [PATCH] fix: messages larger than 64KB are now fragmented properly --- .../jscript/engine/debug/WebSocket.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/me/topchetoeu/jscript/engine/debug/WebSocket.java b/src/me/topchetoeu/jscript/engine/debug/WebSocket.java index d1c0e26..253bf38 100644 --- a/src/me/topchetoeu/jscript/engine/debug/WebSocket.java +++ b/src/me/topchetoeu/jscript/engine/debug/WebSocket.java @@ -87,15 +87,18 @@ public class WebSocket implements AutoCloseable { } private synchronized void write(int type, byte[] data) { try { - for (int i = 0; i < (data.length >> 16); i++) { + int i; + + for (i = 0; i < data.length / 0xFFFF; i++) { out().write(type); writeLength(0xFFFF); - out().write(data, i << 16, 0xFFFF); + out().write(data, i * 0xFFFF, 0xFFFF); + type = 0; } out().write(type | 0x80); - writeLength(data.length & 0xFFFF); - out().write(data, data.length & 0xFFFF0000, data.length & 0xFFFF); + writeLength(data.length % 0xFFFF); + out().write(data, i * 0xFFFF, data.length % 0xFFFF); } catch (IOException e) { throw new UncheckedIOException(e); @@ -116,7 +119,7 @@ public class WebSocket implements AutoCloseable { } public void send(Object data) { // TODO: Remove - System.out.println("SEND: " + data); + // System.out.println("SEND: " + data); if (closed) throw new IllegalStateException("Object is closed."); write(1, data.toString().getBytes()); } @@ -199,7 +202,7 @@ public class WebSocket implements AutoCloseable { var raw = data.toByteArray(); // TODO: Remove - System.out.println("RECEIVED: " + new String(raw)); + // System.out.println("RECEIVED: " + new String(raw)); if (type == 1) return new WebSocketMessage(new String(raw));