Forked code.google.com/p/go.net/spdy
spdy.Session and spdy.Stream: a higher-level implementation of the SPDY/2 protocol, built on top of spdy.Framer
Forgot types.go
Stream.WriteHeadersFrame(): a convenience method to send HEADERS control frames
Removed debug code
spdy.CopyBytes(): copy the contents of data frames into an io.Writer. Other frame types are discarded.
Stream.CopyFrom(): read data from a source, and send it as data frames
spdy.Split(): read frames from a source and dispatch them to 3 different destinations based on their type: data, headers and control (eg. syn_stream, syn_reply, rst_stream etc.)
Fixed error passing in spdy.DialTCP()
DataFramer, DataWriter, DataReader: convenience adapters between io.ReadWriter and spdy.FrameReadWriter
Implemented drop-in compatibility with net/http
Fix a bug in spdy.Split() which caused a crash on nil arguments
Refactored Session and Stream. Better buffering, better integration with upstream error types, new convenience types: Pipe, StreamPipe and Socket. Improved test coverage.
Renamed Frame{Reader,Writer,ReadWriter,Closer,WriteCloser} to {Reader,Writer,ReadWriter,Closer,WriteCloser}
[...] Stream IDs do not wrap: when a client or server cannot create a new stream id without exceeding a 31 bit value, it MUST NOT create a new stream. [...]
Cleaned up comments and debug code
Rudimentary support for PING
Let's try testing for each sentence in the spec. First: rules of stream ID allocation
Cosmetic fixes in comments
Renamed Session.OpenStream() to Session.InitiateStream()