engine.io
Advanced tools
Comparing version 6.5.1 to 6.5.2-alpha.1
@@ -14,16 +14,13 @@ "use strict"; | ||
const webtransport_1 = require("./transports/webtransport"); | ||
const util_1 = require("util"); | ||
const engine_io_parser_1 = require("engine.io-parser"); | ||
const debug = (0, debug_1.default)("engine"); | ||
const kResponseHeaders = Symbol("responseHeaders"); | ||
const TEXT_DECODER = new util_1.TextDecoder(); | ||
function parseSessionId(handshake) { | ||
if (handshake.startsWith("0{")) { | ||
try { | ||
const parsed = JSON.parse(handshake.substring(1)); | ||
if (typeof parsed.sid === "string") { | ||
return parsed.sid; | ||
} | ||
function parseSessionId(data) { | ||
try { | ||
const parsed = JSON.parse(data); | ||
if (typeof parsed.sid === "string") { | ||
return parsed.sid; | ||
} | ||
catch (e) { } | ||
} | ||
catch (e) { } | ||
} | ||
@@ -347,3 +344,4 @@ class BaseServer extends events_1.EventEmitter { | ||
const stream = result.value; | ||
const reader = stream.readable.getReader(); | ||
const transformStream = (0, engine_io_parser_1.createPacketDecoderStream)(this.opts.maxHttpBufferSize, "nodebuffer"); | ||
const reader = stream.readable.pipeThrough(transformStream).getReader(); | ||
// reading the first packet of the stream | ||
@@ -356,7 +354,7 @@ const { value, done } = await reader.read(); | ||
clearTimeout(timeout); | ||
const handshake = TEXT_DECODER.decode(value); | ||
// handshake is either | ||
// "0" => new session | ||
// '0{"sid":"xxxx"}' => upgrade | ||
if (handshake === "0") { | ||
if (value.type !== "open") { | ||
debug("invalid WebTransport handshake"); | ||
return session.close(); | ||
} | ||
if (value.data === undefined) { | ||
const transport = new webtransport_1.WebTransport(session, stream, reader); | ||
@@ -376,3 +374,3 @@ // note: we cannot use "this.generateId()", because there is no "req" argument | ||
} | ||
const sid = parseSessionId(handshake); | ||
const sid = parseSessionId(value.data); | ||
if (!sid) { | ||
@@ -379,0 +377,0 @@ debug("invalid WebTransport handshake"); |
@@ -11,4 +11,4 @@ import { Transport } from "../transport"; | ||
get supportsFraming(): boolean; | ||
send(packets: any): void; | ||
send(packets: any): Promise<void>; | ||
doClose(fn: any): void; | ||
} |
@@ -6,12 +6,4 @@ "use strict"; | ||
const debug_1 = require("debug"); | ||
const engine_io_parser_1 = require("engine.io-parser"); | ||
const debug = (0, debug_1.default)("engine:webtransport"); | ||
const BINARY_HEADER = Buffer.of(54); | ||
function shouldIncludeBinaryHeader(packet, encoded) { | ||
// 48 === "0".charCodeAt(0) (OPEN packet type) | ||
// 54 === "6".charCodeAt(0) (NOOP packet type) | ||
return (packet.type === "message" && | ||
typeof packet.data !== "string" && | ||
encoded[0] >= 48 && | ||
encoded[0] <= 54); | ||
} | ||
/** | ||
@@ -24,19 +16,20 @@ * Reference: https://developer.mozilla.org/en-US/docs/Web/API/WebTransport_API | ||
this.session = session; | ||
this.writer = stream.writable.getWriter(); | ||
const transformStream = (0, engine_io_parser_1.createPacketEncoderStream)(); | ||
transformStream.readable.pipeTo(stream.writable); | ||
this.writer = transformStream.writable.getWriter(); | ||
(async () => { | ||
let binaryFlag = false; | ||
while (true) { | ||
const { value, done } = await reader.read(); | ||
if (done) { | ||
debug("session is closed"); | ||
break; | ||
try { | ||
while (true) { | ||
const { value, done } = await reader.read(); | ||
if (done) { | ||
debug("session is closed"); | ||
break; | ||
} | ||
debug("received chunk: %o", value); | ||
this.onPacket(value); | ||
} | ||
debug("received chunk: %o", value); | ||
if (!binaryFlag && value.byteLength === 1 && value[0] === 54) { | ||
binaryFlag = true; | ||
continue; | ||
} | ||
this.onPacket(this.parser.decodePacketFromBinary(value, binaryFlag, "nodebuffer")); | ||
binaryFlag = false; | ||
} | ||
catch (e) { | ||
debug("error while reading: %s", e.message); | ||
} | ||
})(); | ||
@@ -52,20 +45,15 @@ session.closed.then(() => this.onClose()); | ||
} | ||
send(packets) { | ||
async send(packets) { | ||
this.writable = false; | ||
for (let i = 0; i < packets.length; i++) { | ||
const packet = packets[i]; | ||
const isLast = i + 1 === packets.length; | ||
this.parser.encodePacketToBinary(packet, (data) => { | ||
if (shouldIncludeBinaryHeader(packet, data)) { | ||
debug("writing binary header"); | ||
this.writer.write(BINARY_HEADER); | ||
} | ||
debug("writing chunk: %o", data); | ||
this.writer.write(data); | ||
if (isLast) { | ||
this.writable = true; | ||
this.emit("drain"); | ||
} | ||
}); | ||
try { | ||
for (let i = 0; i < packets.length; i++) { | ||
const packet = packets[i]; | ||
await this.writer.write(packet); | ||
} | ||
} | ||
catch (e) { | ||
debug("error while writing: %s", e.message); | ||
} | ||
this.writable = true; | ||
this.emit("drain"); | ||
} | ||
@@ -72,0 +60,0 @@ doClose(fn) { |
{ | ||
"name": "engine.io", | ||
"version": "6.5.1", | ||
"version": "6.5.2-alpha.1", | ||
"description": "The realtime engine behind Socket.IO. Provides the foundation of a bidirectional connection between client and server", | ||
@@ -42,3 +42,3 @@ "type": "commonjs", | ||
"debug": "~4.3.1", | ||
"engine.io-parser": "~5.1.0", | ||
"engine.io-parser": "~5.2.1", | ||
"ws": "~8.11.0" | ||
@@ -83,4 +83,4 @@ }, | ||
"engines": { | ||
"node": ">=10.0.0" | ||
"node": ">=10.2.0" | ||
} | ||
} |
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
162399
4475
1
+ Addedengine.io-parser@5.2.2(transitive)
- Removedengine.io-parser@5.1.0(transitive)
Updatedengine.io-parser@~5.2.1