Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add protocol version negotiation #7

Open
wants to merge 6 commits into
base: master
Choose a base branch
from

Conversation

stefanrusek
Copy link

These two changes fix some version issues with espdy.

The first changeset just fixed version handling to match what the SPDY2 spec says about which frames should care about version mismatch, and which shouldn't care.

The second changeset adds an additional option for spdy_version, when creating a session. 'negotiate' tells the session to defer Zdef init until the client sends its first SETTINGS frame. At which point Zdef is initialized, and the spdy_version is selected. This allows espdy to accept both spdy2 and spdy3 clients.

Ignore frames with mismatching version numbers, except for SYN_STREAM

Per http://www.chromium.org/spdy/spdy-
protocol/spdy-protocol-draft2#TOC-Protocol-versioning

> SPDY does lazy version checking on receipt of any control frame, and
> does version enforcement only on SYN_STREAM frames.  If an endpoint
> receives a SYN_STREAM frame with an unsupported version, the endpoint
> must return a RST_STREAM frame with the status code
> UNSUPPORTED_VERSION.  For any other type of control frame, the frame
> must be ignored.
Allow {spdy_version, negotiate} to be passed to
espdy_session:start_link.

When in negotiate mode, no version is selected until the client sends
its first SETTINGS frame, at which point we switch to the same version
sent in the frame.
* add {ok, noreply, State} response from cbmod:init()
* pass messages from the stream to the cbmod
We now responce to the WINDOW_UPDATE frame, and maintain the remaining
window size. We don't block when there window size drops below zero yet.
@stefanrusek
Copy link
Author

ping

@stefanrusek
Copy link
Author

I've also added support for the WINDOW_UPDATE frame in the session and stream modules. This makes it so that Firefox is properly supported.

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.

1 participant