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 nameInterfaceFired 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: - - - - - - - - - - - - - - -
event handlerevent handler event type
ontransport{{LP2PReceiver/transport}}
+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.