BiagioFesta / wtransport

Async-friendly WebTransport implementation in Rust
Apache License 2.0
471 stars 31 forks source link

Wrong model for stream error codes #182

Open MOZGIII opened 6 months ago

MOZGIII commented 6 months ago

The stream error codes are modelled incorrectly.

Currently, wtransport just passes the error code numeric value (in fact, the same VarInt) through to the QUIC / HTTP3 layer.

However, this is not correct. WebTransport is supposed to apply the following conversion to the error codes:

fn webtransport_code_to_http_code(n: u32) -> wtransport::VarInt {
    let first: u64 = 0x52e4a40fa8db;
    let n: u64 = n.into();
    let val: u64 = first + n + (n / 0x1e);
    val.try_into().unwrap()
}

This is based on https://github.com/web-platform-tests/wpt/blob/master/webtransport/resources/webtransport-test-helpers.sub.js#L18 - which is based on https://ietf-wg-webtrans.github.io/draft-ietf-webtrans-http3/draft-ietf-webtrans-http3.html#section-4.3.