diff --git a/EXPLAINER.md b/EXPLAINER.md
index 25dbe58..e3d500c 100644
--- a/EXPLAINER.md
+++ b/EXPLAINER.md
@@ -91,11 +91,11 @@ await transport.ready;
```js
// Peer B
-receiver.ontransport = async (e) => {
- const transport = e.transport;
+const listener = new LP2PQuicTransportListener(receiver);
+for await (const transport of listener.incomingTransports) {
await transport.ready;
-};
+}
```
Refer to the [WebTransport examples](https://www.w3.org/TR/webtransport/#examples) for usage of a WebTransport object.
diff --git a/index.bs b/index.bs
index c416554..d14060c 100644
--- a/index.bs
+++ b/index.bs
@@ -391,7 +391,7 @@ This {{LP2PQuicTransport}} extension allows opening a QuicTransport using an exi
[Exposed=(Window,Worker), SecureContext]
partial interface LP2PQuicTransport {
constructor(LP2PConnection connection,
- optional LP2PQuicTransportInit dataChannelDict = {});
+ optional LP2PQuicTransportInit quicTransportDict = {});
};
@@ -680,13 +680,13 @@ channel.onopen = e => {
The LP2PQuicTransport Interface {#lp2p-quic-transport}
======================================================
-The LP2PQuicTransport Interface allows opening a dedicated [[!webtransport]] between peers. If the LP2PRequest is not yet started, it must be started when the start method of the LP2PQuicTransport is called.
+The LP2PQuicTransport Interface allows opening a [[!webtransport]] between peers. If the LP2PRequest or LP2PReceiver is not yet started, it must be started when the LP2PQuicTransport is constructed.
[Exposed=(Window,Worker), SecureContext]
interface LP2PQuicTransport : WebTransport {
- constructor(LP2PRequest request,
- optional LP2PQuicTransportInit dataChannelDict = {});
+ constructor((LP2PRequest or LP2PReceiver) source,
+ optional LP2PQuicTransportInit quicTransportDict = {});
};
[Exposed=(Window,Worker), SecureContext]
@@ -696,74 +696,27 @@ dictionary LP2PQuicTransportInit {
Issue: Define LP2PQuicTransportInit as needed using WebTransportOptions as reference.
-LP2PReceiver Interface Extensions {#lp2p-quic-transport-extensions}
+LP2PQuicTransportListener Interface {#lp2p-quic-transport-listener}
-------------------------------------------------------------------
-
-[Exposed=(Window,Worker), SecureContext]
-partial interface LP2PReceiver {
- attribute EventHandler ontransport;
-};
-
-
-LP2PQuicTransportEvent {#lp2p-quic-transport-event}
-------------------------------------------------
-
-Issue: In general, when defining a new interface that inherits from Event please always ask feedback from the WHATWG or the W3C WebApps WG community. See [defining event interfaces](https://dom.spec.whatwg.org/#defining-event-interfaces).
+The LP2PQuicTransportListener Interface allows listening for incoming [[!webtransport]] transports. If the LP2PRequest or LP2PReceiver is not yet started, it must be started when the LP2PQuicTransport is constructed.
[Exposed=(Window,Worker), SecureContext]
-interface LP2PQuicTransportEvent : Event {
- constructor(DOMString type, LP2PQuicTransportEventInit QuicTransportEventInitDict);
- readonly attribute LP2PQuicTransport transport;
+partial interface LP2PQuicTransportListener {
+ constructor((LP2PRequest or LP2PReceiver) source,
+ optional LP2PQuicTransportListenerInit quicTransportListenerDict = {});
+ readonly attribute Promise<undefined> ready;
+ /* a ReadableStream of LP2PQuicTransport objects */
+ readonly attribute ReadableStream incomingTransports;
};
-dictionary LP2PQuicTransportEventInit : EventInit {
- required LP2PQuicTransport transport;
+[Exposed=(Window,Worker), SecureContext]
+dictionary LP2PQuicTransportListenerInit {
};
-Extensions Events {#lp2p-quic-transport-events}
-------------------------------
-
-The following event is [=fire an event|fired=] at the {{LP2PReceiver}} object:
-
-
-
-
- Event name |
- Interface |
- Fired when… |
-
-
-
-
- transport |
- {{LP2PQuicTransportEvent}} |
- An incoming QuicTransport is received. |
-
-
-
-
-Extensions Event handlers {#lp2p-quic-transport-event-handlers}
-------------------------------------------------------------------------
-
-The following are the event handlers (and their corresponding event handler event types) that must be supported, as event handler IDL attributes, by all objects implementing the {{LP2PReceiver}} interface:
-
-
+Issue: Define LP2PQuicTransportListenerInit as needed using WebTransportOptions as reference.
Examples {#lp2p-quic-transport-examples}
----------------------------------------
@@ -788,15 +741,12 @@ const receiver = new LP2PReceiver({
nickname: "example-receiver",
});
-receiver.ontransport = async e => {
- const transport = e.transport;
-
- // Blocks until transport is ready.
- await transport.ready;
-}
+const listener = new LP2PQuicTransportListener(receiver);
-// Blocks until permission is received.
-await receiver.start();
+for await (const transport of listener.incomingTransports) {
+ // Blocks until transport is ready.
+ await transport.ready;
+}
Refer to the [WebTransport examples](https://www.w3.org/TR/webtransport/#examples) for usage of a [[!webtransport]] object.