streams_dict = {} def session_established(session): # When a WebTransport session is established, a bidirectional stream is # created by the server, which is used to echo back stream data from the # client. session.create_bidirectional_stream() def stream_data_received(session, stream_id: int, data: bytes, stream_ended: bool): # If a stream is unidirectional, create a new unidirectional stream and echo # back the data on that stream. if session.stream_is_unidirectional(stream_id): if (session.session_id, stream_id) not in streams_dict.keys(): new_stream_id = session.create_unidirectional_stream() streams_dict[(session.session_id, stream_id)] = new_stream_id session.send_stream_data(streams_dict[(session.session_id, stream_id)], data, end_stream=stream_ended) if (stream_ended): del streams_dict[(session.session_id, stream_id)] return # Otherwise (e.g. if the stream is bidirectional), echo back the data on the # same stream. session.send_stream_data(stream_id, data, end_stream=stream_ended) def datagram_received(session, data: bytes): session.send_datagram(data)