Skip to content

Engine IO protocol - Webtransport #522

@sanjomo

Description

@sanjomo

async function testServerHandshake() {
console.log("🚀 Connecting to WebTransport...");

const url = "https://127.0.0.1:4433/socket.io/?EIO=4&transport=webtransport";
const transport = new WebTransport(url);

try {
    await transport.ready;
    console.log("✅ WebTransport Connected!");

    // Create a stream to send the handshake
    const stream = await transport.createBidirectionalStream();
    const writer = stream.writable.getWriter();
    const reader = stream.readable.getReader();

    // Send '0' (Engine.IO Handshake)
    console.log("📤 Sending Handshake: '0'");
    const handshakePacket = new Uint8Array([48]); // ASCII '0'
    await writer.write(handshakePacket);

    // Read the server's reply
    console.log("📥 Waiting for reply...");
    const { value, done } = await reader.read();
    
    if (value) {
        const response = new TextDecoder().decode(value);
        console.log("📦 SERVER RESPONSE:", response);

    
    } else {
        console.warn("⚠️ Stream closed without data.");
    }

    //transport.close();

} catch (err) {
    console.error("❌ Connection Failed:", err);
}

}

testServerHandshake();

🚀 Connecting to WebTransport...
Promise {}
VM552:9 ✅ WebTransport Connected!
VM552:17 📤 Sending Handshake: '0'
VM552:22 📥 Waiting for reply...
VM552:27 📦 SERVER RESPONSE: 0{"sid":"69f5ba63-c0ed-4eb8-9010-f4a0c27725d4","upgrades":[],"pingInterval":25000,"pingTimeout":60000}

Our webtransport server sends the above response, but when I connect with socketio js client with webtransport transport it send close capsule(transport.close) without connection ? could you please update the engine IO expectation for webtransport negotiations?

19:37:00 DEBUG io.github.webtransport4j.incubator.WebTransportServer - === [DEBUG] Received HTTP/3 Headers ===
19:37:00 DEBUG io.github.webtransport4j.incubator.WebTransportServer - :scheme: https
19:37:00 DEBUG io.github.webtransport4j.incubator.WebTransportServer - :method: CONNECT
19:37:00 DEBUG io.github.webtransport4j.incubator.WebTransportServer - :authority: 127.0.0.1:4433
19:37:00 DEBUG io.github.webtransport4j.incubator.WebTransportServer - :path: /socket.io/?EIO=4&transport=webtransport
19:37:00 DEBUG io.github.webtransport4j.incubator.WebTransportServer - :protocol: webtransport
19:37:00 DEBUG io.github.webtransport4j.incubator.WebTransportServer - sec-webtransport-http3-draft02: 1
19:37:00 DEBUG io.github.webtransport4j.incubator.WebTransportServer - origin: http://localhost:8080
19:37:00 DEBUG io.github.webtransport4j.incubator.WebTransportServer - =======================================

we send 200 for the http3 connect request

@darrachequesne

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions