tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

README.md (2822B)


WebTransport in web-platform-tests

This document describes WebTransport support in web-platform-tests.

WebTransport over HTTP/3

tools/webtransport provides a simple WebTransport over HTTP/3 server for testing. The server interprets the underlying protocols (WebTransport, HTTP/3 and QUIC) and manages webtransport sessions. When the server receives a request (extended CONNECT method) from a client the server looks up a corresponding webtransport handler based on the :path header value, then delegates actual tasks to the handler. Handlers are typically located under webtransport/handlers.

Handlers

A WebTransport handler is a python script which contains callback functions. Callback functions are called every time a WebTransport event happens. Definitions of all callback can be found the APIs section.

The following is an example handler which echos back received data.

def stream_data_received(session, stream_id: int, data: bytes, stream_ended: bool):
    if session.stream_is_unidirectional(stream_id):
        return
    session.send_stream_data(stream_id, data)


def datagram_received(session, data: bytes):
    session.send_datagram(data)

session is a WebTransportSession object that represents a WebTransport over HTTP/3 session. It provides APIs to handle the session.

Handler APIs

`connection_received(request_headers, response_headers)`

Called whenever an extended CONNECT method is received.

- <b>request_headers</b>: The request headers received from the peer. - <b>response_headers</b>: The response headers which will be sent to the peer :status is set to 200 when it isn't specified.


`session_established(session)`

Called whenever a WebTransport session is established.

- <b>session</b>: A WebTransport session object.


`stream_data_received(session, stream_id, data, stream_ended)`

Called whenever data is received on a WebTransport stream.

- <b>session</b>: A WebTransport session object. - <b>stream_id</b>: The ID of the stream. - <b>data</b>: The received data. - <b>stream_ended</b>: Whether the stream is ended.


`datagram_received(session, data)`

Called whenever a datagram is received on a WebTransport session.

- <b>session</b>: A WebTransport session object. - <b>data</b>: The received data.


`stream_reset(session, stream_id, error_code)`

Called whenever a datagram is reset with RESET_STREAM.

- <b>session</b>: A WebTransport session object. - <b>stream_id</b>: The ID of the stream. - <b>error_code</b>: The reason of the reset.