From 55e8fcd5144d4d28928038db9a0b9d6b97ad4c76 Mon Sep 17 00:00:00 2001 From: LossyDragon Date: Tue, 7 Oct 2025 16:50:38 -0500 Subject: [PATCH 1/3] Try and fix handleMulti again to fix a rare error. --- .../dragonbra/javasteam/steam/CMClient.java | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/main/java/in/dragonbra/javasteam/steam/CMClient.java b/src/main/java/in/dragonbra/javasteam/steam/CMClient.java index 3c1f834b..8c8411f7 100644 --- a/src/main/java/in/dragonbra/javasteam/steam/CMClient.java +++ b/src/main/java/in/dragonbra/javasteam/steam/CMClient.java @@ -25,15 +25,17 @@ import in.dragonbra.javasteam.util.log.LogManager; import in.dragonbra.javasteam.util.log.Logger; import in.dragonbra.javasteam.util.stream.BinaryReader; +import okio.Buffer; +import okio.BufferedSource; +import okio.GzipSource; +import okio.Okio; import org.jetbrains.annotations.Nullable; import java.io.ByteArrayInputStream; import java.io.IOException; -import java.io.InputStream; import java.net.InetAddress; import java.net.InetSocketAddress; import java.util.EnumSet; -import java.util.zip.GZIPInputStream; /** * This base client handles the underlying connection to a CM server. This class should not be use directly, but through @@ -374,20 +376,19 @@ private void handleMulti(IPacketMsg packetMsg) { var msgMulti = new ClientMsgProtobuf(CMsgMulti.class, packetMsg); var payload = msgMulti.getBody().getMessageBody().toByteArray(); - try { - InputStream inputStream; + try(var payloadBuffer = new Buffer().write(payload)) { + BufferedSource source; if (msgMulti.getBody().getSizeUnzipped() > 0) { - inputStream = new GZIPInputStream(new ByteArrayInputStream(payload)); + source = Okio.buffer(new GzipSource(payloadBuffer)); } else { - inputStream = new ByteArrayInputStream(payload); + source = payloadBuffer; } - try (inputStream; var br = new BinaryReader(inputStream)) { - while (br.available() > 0) { - var subSize = br.readInt(); - var subData = br.readBytes(subSize); - + try(source) { + while(!source.exhausted()) { + int subSize = source.readIntLe(); + byte[] subData = source.readByteArray(subSize); if (!onClientMsgReceived(getPacketMsg(subData))) { break; } From 71d0141531f3ceb4f82e668d17fd9d5b9705fd37 Mon Sep 17 00:00:00 2001 From: LossyDragon Date: Fri, 10 Oct 2025 13:56:59 -0500 Subject: [PATCH 2/3] Tweak the loop. --- .../in/dragonbra/javasteam/steam/CMClient.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/main/java/in/dragonbra/javasteam/steam/CMClient.java b/src/main/java/in/dragonbra/javasteam/steam/CMClient.java index 8c8411f7..150311cd 100644 --- a/src/main/java/in/dragonbra/javasteam/steam/CMClient.java +++ b/src/main/java/in/dragonbra/javasteam/steam/CMClient.java @@ -376,7 +376,7 @@ private void handleMulti(IPacketMsg packetMsg) { var msgMulti = new ClientMsgProtobuf(CMsgMulti.class, packetMsg); var payload = msgMulti.getBody().getMessageBody().toByteArray(); - try(var payloadBuffer = new Buffer().write(payload)) { + try (var payloadBuffer = new Buffer().write(payload)) { BufferedSource source; if (msgMulti.getBody().getSizeUnzipped() > 0) { @@ -385,14 +385,16 @@ private void handleMulti(IPacketMsg packetMsg) { source = payloadBuffer; } - try(source) { - while(!source.exhausted()) { - int subSize = source.readIntLe(); - byte[] subData = source.readByteArray(subSize); - if (!onClientMsgReceived(getPacketMsg(subData))) { + try (source) { + do { + var subSize = source.readIntLe(); + var subData = source.readByteArray(subSize); + var msg = getPacketMsg(subData); + + if (!onClientMsgReceived(msg)) { break; } - } + } while (!source.exhausted()); } } catch (IOException e) { logger.error("error in handleMulti()", e); From a694f55243017785edc08768334437306d10a775 Mon Sep 17 00:00:00 2001 From: LossyDragon Date: Mon, 13 Oct 2025 09:30:20 -0500 Subject: [PATCH 3/3] Finish removing BinaryReader from CMClient. --- src/main/java/in/dragonbra/javasteam/steam/CMClient.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/in/dragonbra/javasteam/steam/CMClient.java b/src/main/java/in/dragonbra/javasteam/steam/CMClient.java index 150311cd..940c0962 100644 --- a/src/main/java/in/dragonbra/javasteam/steam/CMClient.java +++ b/src/main/java/in/dragonbra/javasteam/steam/CMClient.java @@ -24,14 +24,12 @@ import in.dragonbra.javasteam.util.event.ScheduledFunction; import in.dragonbra.javasteam.util.log.LogManager; import in.dragonbra.javasteam.util.log.Logger; -import in.dragonbra.javasteam.util.stream.BinaryReader; import okio.Buffer; import okio.BufferedSource; import okio.GzipSource; import okio.Okio; import org.jetbrains.annotations.Nullable; -import java.io.ByteArrayInputStream; import java.io.IOException; import java.net.InetAddress; import java.net.InetSocketAddress; @@ -336,8 +334,8 @@ public static IPacketMsg getPacketMsg(byte[] data) { } int rawEMsg = 0; - try (var reader = new BinaryReader(new ByteArrayInputStream(data))) { - rawEMsg = reader.readInt(); + try (var buffer = new Buffer().write(data)) { + rawEMsg = buffer.readIntLe(); } catch (IOException e) { logger.debug("Exception while getting EMsg code", e); }