From ead3ddd7068c831f1a63b6de9b72c72f827e8ea0 Mon Sep 17 00:00:00 2001 From: Daniel Huigens Date: Fri, 25 May 2018 19:23:09 +0200 Subject: [PATCH] Streaming decrypt old-format packets --- src/packet/packet.js | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/packet/packet.js b/src/packet/packet.js index fdf80255..1761fd33 100644 --- a/src/packet/packet.js +++ b/src/packet/packet.js @@ -169,6 +169,7 @@ export default { packet_length_type = headerByte & 0x03; // bit 1-0 } + const streaming = this.supportsStreaming(tag); let packet = null; if (!format) { // 4.2.1. Old Format Packet Lengths @@ -204,7 +205,6 @@ export default { break; } } else { // 4.2.2. New Format Packet Lengths - const streaming = this.supportsStreaming(tag); let wasPartialLength; do { // 4.2.2.1. One-Octet Lengths @@ -235,26 +235,26 @@ export default { packet_length = (await reader.readByte() << 24) | (await reader.readByte() << 16) | (await reader.readByte() << 8) | await reader.readByte(); } - if (streaming) { - if (controller) { - controller.enqueue(await reader.readBytes(packet_length)); - } else { - // Send the remainder of the packet to the callback as a stream - reader.releaseLock(); - packet = stream.subarray(stream.clone(input), 0, packet_length); - await callback({ tag, packet }); - - // Read the entire packet before parsing the next one - reader = stream.getReader(input); - await reader.readBytes(packet_length); - } + if (controller) { + controller.enqueue(await reader.readBytes(packet_length)); } } while(wasPartialLength); } if (!packet) { - packet = await reader.readBytes(packet_length); - await callback({ tag, packet }); + if (streaming) { + // Send the remainder of the packet to the callback as a stream + reader.releaseLock(); + packet = stream.subarray(stream.clone(input), 0, packet_length); + await callback({ tag, packet }); + + // Read the entire packet before parsing the next one + reader = stream.getReader(input); + await reader.readBytes(packet_length); + } else { + packet = await reader.readBytes(packet_length); + await callback({ tag, packet }); + } } else if (controller) { controller.close(); }