Add protocol version negotiation #7

wants to merge 6 commits into from

1 participant


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.

stefanrusek added some commits May 14, 2013
@stefanrusek stefanrusek Fix version handling
Ignore frames with mismatching version numbers, except for SYN_STREAM


> 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.
@stefanrusek stefanrusek Add SPDY version auto negotiation
Allow {spdy_version, negotiate} to be passed to

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.
@stefanrusek stefanrusek Update espdy_stream
* add {ok, noreply, State} response from cbmod:init()
* pass messages from the stream to the cbmod
@stefanrusek stefanrusek Add additional error handling in for espdy_stream 35709d8
@stefanrusek stefanrusek Make it possible to control logging 34dbb3d
@stefanrusek stefanrusek Maintain window size state
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.

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