Design Issue: Merge RST_STREAM and GOAWAY into a single ERROR frame type

As a simplification, I'd like to suggest that we merge the RST_STREAM
and GOAWAY frames into a single ERROR frame with the following
definition:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Error Code (32)                          |
+---------------------------------------------------------------+
|X|                  Last-Stream-ID (31)                        |
+-+-------------------------------------------------------------+

(note that this flips the field order from the GOAWAY frame)

A frame-specific GOAWAY flag bit (0x2) would be defined for the frame,
and the Last-Stream-ID field would only be included in the frame data
if this flag was set.

This does a couple of things for us:

1. It simplifies the error handling and reduces the number of core frame types.
2. It allows us to terminate a stream and terminate the session in a
single frame if necessary
3. It gives us a way of reporting non-terminal session errors
(currently RST_STREAM is forbidden to use stream id #0 and GOAWAY is
always terminal).

Received on Friday, 3 May 2013 20:05:00 UTC