Skip to content

Partially address #342 and #343. - #378

Open
markafoltz wants to merge 3 commits into
mainfrom
osp-app-issues-1
Open

markafoltz wants to merge 3 commits into
mainfrom
osp-app-issues-1

Conversation

@markafoltz

Copy link
Copy Markdown
Contributor

This PR partially addresses issues in the application protocol specification after the split from the network specification.

After the split there are two main areas to fix.

  1. The spec needs a message transport between agents, but does not define what it is.
  2. The spec contains many references to QUIC implementation details.

To decouple the application protocol from QUIC, this PR defines an OSP transport, OSP stream, and an OSP message. It lists some requirements to be an OSP transport and then rewrites other places in the spec to refer to these concepts instead of QUIC.

@markafoltz
markafoltz requested review from baylesj and tidoust October 29, 2026 19:27
baylesj added a commit to baylesj/openscreenprotocol that referenced this pull request Oct 29, 2026
w3c#342)

Builds on w3c#378. Replaces direct references to mDNS, DNS-SD, and TLS-secured
QUIC in the Presentation API and Remote Playback API discovery sections and in
the security and privacy sections with references to the discovery guidelines,
OSP connections, and transport requirements.
baylesj added a commit to baylesj/openscreenprotocol that referenced this pull request Oct 29, 2026
Builds on w3c#378. Rewrites the video, data, and feedback frame sections, the
request and watch ID note, protocol extensions, and Appendix A to use OSP
message streams and OSP connections. Moves the QUIC keep-alive details that
w3c#378 removed from the application spec into the network spec.
Comment thread application.bs
who are in phyiscal proximity to both agents (i.e., browser and receiver
device). For that reason, discovery mechanisms that rely on phyical proximity
such as WiFi or the display of a QR Code are good candidates to implement these
mechanisms. If an [=OSP agent=] is discovered by another solely by communicaiton

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: spelling (communicaiton).

Comment thread application.bs
provides one such implementation using multicast DNS (mDNS).

[=OSP agents=] are intended to support interactive media experiences to users
who are in phyiscal proximity to both agents (i.e., browser and receiver

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: spelling

Comment thread application.bs
Application Protocol should meet the following functional requirements:

1. Support the bi-directional sending and receiving of [=OSP messages=].
1. Support the simultaneous and bi-directional [=OSP message streams=]. There

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: "the" is superfluous in this first sentence IIUC.

Comment thread application.bs
Screen Network Protocol, which provides a way for browsers and devices to
discover, connect, and authenticate each other on a local area network.
connection technologies between browsers and devices. There are guidelines on
how allow browsers and devices should discover one another, and requirements

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Typo:

Suggested change
how allow browsers and devices should discover one another, and requirements
how browsers and devices should discover one another, and requirements

Comment thread application.bs

Issue(342): Define Discovery Requirements
Discovery mechanisms between [=OSP agents=] should provide sufficient information to
initiate an network data transport between them, typically by obtaining an IP

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
initiate an network data transport between them, typically by obtaining an IP
initiate a network data transport between them, typically by obtaining an IP

Comment thread application.bs
connection alive for the purposes of sending or receiving messages, the
connection should be closed.

In order to keep a [=OSP connection=] alive, an agent may send an

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
In order to keep a [=OSP connection=] alive, an agent may send an
In order to keep an [=OSP connection=] alive, an agent may send an

Comment thread application.bs
[=agent-status-request=] message, and any agent that receives an
[=agent-status-request=] message should send an [=agent-status-response=]
message. Such messages should be sent with enough frequency to prevent the
underlying transport from closing from inactivity.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The QUIC-specific parts removed here (close with error code 5139, 25 s idle_timeout transport parameter, do not use QUIC PING frames, reset the idle timer on every stream write) are not in network.bs. network.bs lines 393-395 only say "periodically sending data". Can these move to the Network Protocol so implementers still have them?

Comment thread application.bs
underlying transport from closing from inactivity.

Note: An idle timeout of 25 seconds is recommended. If an [=OSP agent=] does
not send or receive a message within that period, it shoul send an an

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
not send or receive a message within that period, it shoul send an an
not send or receive a message within that period, it should send an

Comment thread application.bs
If an [=OSP agent=] suspends its [=OSP connections=] (e.g. for power saving
reasons), it should attempt to resume [=OSP connections=] to the [=OSP agents=]
to which it was previously connected when possible. Once reconnected, it should
send `agent-status-request` messages to those agents.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
send `agent-status-request` messages to those agents.
send [=agent-status-request=] messages to those agents.

Comment thread application.bs
[=OSP messages=] in order, they must be sent in one [=OSP message stream=].
Independent groups of [=OSP messages=] (with no ordering dependency across
groups) should be sent in different [=OSP message streams=]. In order to put
multiple CBOR-serialized messages into the the same [=OSP message stream=], the

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
multiple CBOR-serialized messages into the the same [=OSP message stream=], the
multiple CBOR-serialized messages into the same [=OSP message stream=], the

@backkem

backkem commented Oct 29, 2026

Copy link
Copy Markdown
Contributor

Some notes, beyond the points @baylesj raised:

  1. Ordering groups. Could the spec say which messages must share an OSP message stream? Presentation connection messages need per-connection ordering, and a connection message shouldn't overtake the presentation-start-response / presentation-connection-open-response that carries its connection ID. Relatedly: is a transport with a single ordered stream (e.g. one data channel) conforming, or are concurrent streams required?

  2. Errors. With the 404 close code gone, should the transport carry an error code and reason, or should the protocol define an error message? What's expected for malformed CBOR, recognized-but-unsupported messages (e.g. streaming messages to an agent without that capability), and requests nobody handles? Closing the whole connection on an unknown type key also seems harsh for extensions.

  3. Peer identity. The transport requirements cover message authentication and confidentiality, but not a stable, authenticated peer identity. The application protocol relies on one for request ID scoping, reconnects and trusting agent-info. Could that be a transport requirement?

  4. ID scope across reconnects. What is the scope of request IDs (and watch IDs and presentation connection IDs): one OSP connection, or the agent pair across reconnects? This matters more now that connections can be suspended and resumed. The streaming section also still refers to a state-token rule that neither spec defines.

@backkem

backkem commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

FWIW, I happened to do an experimental version of the Application Protocol in TypeScript over DataChannels/WebTransport earlier (note: that's before I saw this PR): https://github.com/backkem/go-lp2p/tree/main/osp-app#osp-app . It's just meant as a testing ground. If there is interest we could make it more rigorous.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants